Importer des données complexes dans SAS avec PROC IMPORT

Cet article en deux mots :

Oubliez la saisie manuelle et passez à la vitesse supérieure en maîtrisant PROC IMPORT, le véritable couteau suisse du développeur SAS. Que vos données soient cachées dans des fichiers CSV récalcitrants, des classeurs Excel complexes ou des bases Access, ce guide pratique vous livre les scripts essentiels pour automatiser vos imports avec précision et transformer vos fichiers bruts en tables prêtes pour l'analyse.

Dans notre précédent article, nous avons vu comment créer un jeu de données en tapant nos valeurs directement dans le code avec l'instruction DATALINES. Soyons honnêtes : c'est très mignon quand on veut lister quatre fromages pour un tutoriel, mais dans la vraie vie, personne ne fait ça. Dans le monde impitoyable de la Data, les données vous arrivent sous la forme de fichiers Excel de 50 Mo envoyés par la comptabilité, d'extractions de bases de données obscures ou de fichiers texte séparés par des caractères improbables.

Essayer de lire ces fichiers à la main reviendrait à vouloir faire entrer un chat récalcitrant dans sa caisse de transport : c'est possible, mais vous risquez d'y laisser des plumes. Heureusement, SAS possède une arme secrète pour automatiser cette tâche : la procédure PROC IMPORT

Découvrons comment utiliser ce couteau suisse pour ingérer presque n'importe quel format de fichier !

1. Dompter les fichiers texte délimités (CSV, TXT)

Un fichier délimité est un fichier texte simple où chaque colonne est séparée par un caractère spécifique (une virgule, un point-virgule, une tabulation, etc.)

Imaginons que nous devons analyser les ventes d'une boulangerie. Le système de caisse nous a recraché un fichier texte ventes_matin.txt où les informations sont séparées par des points-virgules.

Voici comment aspirer ces données dans SAS :

SAS


1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* Importation d'un fichier texte délimité par des points-virgules */
PROC IMPORT
DATAFILE = "C:\Boulangerie\Donnees\ventes_matin.txt"
OUT = table_ventes_sas
DBMS = DLM
REPLACE;
DELIMITER = ';';
GETNAMES = YES;
RUN;

/* Vérification rapide des données importées */
PROC PRINT DATA = table_ventes_sas;
TITLE "Ventes de la matinée (Fichier Délimité)";
RUN;

Que se passe-t-il ici ?

  • DATAFILE indique à SAS où trouver le fichier source
  • OUT donne le nom de la table SAS qui sera créée (ici table_ventes_sas)
  • DBMS = DLM précise qu'il s'agit d'un fichier délimité (DeLiMited)
  • REPLACE ordonne à SAS d'écraser la table table_ventes_sas si elle existe déjà (très pratique quand on relance son code 20 fois de suite)
  • DELIMITER définit le fameux caractère séparateur
  • GETNAMES = YES est magique : il lit la première ligne de votre fichier pour nommer automatiquement vos variablesColonnes d'une table SAS contenant des données spécifiques (numériques ou caractères). Elles possèdent des attributs comme le nom, le type, la longueur, l'étiquette et le format d'affichage. SAS S'il y a des espaces dans vos noms de colonnes Excel, SAS les remplacera par des tirets du bas (_).

2. Aspirer la magie de Microsoft Excel

PROC IMPORT peut lire directement les données depuis la plupart des versions d'Excel Supposez que votre boulanger tienne son inventaire des stocks dans un fichier Excel, sur un onglet précis nommé Stocks_Viennoiseries.

SAS


1
2
3
4
5
6
7
8
9
10
11
12
/* Importation d'une feuille spécifique d'un classeur Excel */
PROC IMPORT
DATAFILE = "C:\Boulangerie\Donnees\inventaire.xls"
OUT = table_stocks
DBMS = EXCEL REPLACE;
SHEET = "Stocks_Viennoiseries";
GETNAMES = YES;
RUN;

PROC PRINT DATA = table_stocks;
TITLE "État des stocks de viennoiseries (Fichier Excel)";
RUN;

Les subtilités Excel :

  • DBMS = EXCEL dit à SAS de traiter un tableur. (Note : Selon votre version de SAS, il est parfois nécessaire de préciser la version exacte d'Excel, par exemple DBMS = EXCEL97, bien que SAS soit généralement assez intelligent pour le deviner tout seul grâce à l'extension du fichier)
  • L'instruction SHEET cible très exactement l'onglet à importer Si votre classeur n'a qu'un seul onglet, vous pouvez omettre cette ligne.

3. Extraire depuis une base de données (Microsoft Access)

Enfin, que faire si vos données RH (les horaires des pâtissiers) sont bloquées dans une base de données relationnelle comme Microsoft Access ? PROC IMPORT gère cela aussi avec brio La syntaxe change légèrement car on ne parle plus de "fichier de données" mais de "Table" et de "Base de données".

SAS


1
2
3
4
5
6
7
8
9
10
11
/* Importation d'une table depuis une base Microsoft Access */
PROC IMPORT
TABLE = "Horaires_Employes"
OUT = table_planning
DBMS = ACCESS REPLACE;
DATABASE = "C:\Boulangerie\Donnees\rh_boulangerie.mdb";
RUN;

PROC PRINT DATA = table_planning;
TITLE "Planning de l'équipe (Base Access)";
RUN;

Le jargon Access :

  • L'instruction TABLE indique le nom de la table spécifique à l'intérieur de la base de données
  • DBMS = ACCESS active le moteur de lecture de bases de données
  • L'instruction DATABASE remplace le DATAFILE pour fournir le chemin exact du fichier .mdb (ou .accdb selon les versions)

Le mot de la fin

Maîtriser PROC IMPORT vous fera gagner un temps précieux dans la phase de préparation de vos données. Une fois vos tables importées dans SAS, vous pourrez les triturer, les fusionner et les analyser à volonté.

Dans notre prochain article, nous aborderons un sujet qui donne souvent des sueurs froides aux développeurs débutants : la gestion des dates et des heures lors de l'importation de données ! (Car non, SAS ne lit pas naturellement "12/05/2024" sans qu'on lui explique comment faire).

Nicolas Housset

Passionné d'informatique, je suis Consultant et expert technique SAS VIYA, également co-fondateur de la société Flexcelite. Spécialisé dans les technologies SAS (Viya, 9.4) et les infrastructures associées (Linux, Hadoop, Azure), ce blog est mon espace pour partager mes mémos techniques et retours d'expérience.