Guide SAS VIYA

Tutoriel SAS Viya : Importer un fichier texte sans en-tête et renommer les colonnes dynamiquement

Simon 8 views
Difficulty Level
Débutant
Published on :
Simon

Expert Advice

Simon

Si PROC IMPORT est rapide, il reste une 'boîte noire'. Pour des fichiers volumineux sans en-tête, privilégiez la Phase B (renommage dynamique) avec PROC DATASETS : contrairement à une étape DATA classique, elle modifie uniquement les métadonnées de la table, ce qui évite de réécrire physiquement les données et fait gagner un temps précieux en environnement CAS

Lors de l'importation de fichiers plats (CSV, TXT) dans SAS© Viya via PROC IMPORT, un scénario fréquent pose problème : le fichier de données ne contient pas de ligne d'en-tête, et les noms de colonnes sont fournis séparément (par exemple dans un document Word ou Excel).

Par défaut, si vous utilisez l'option GETNAMES=NO, SAS© génère des noms génériques (VAR1, VAR2, VAR3...).

Comment appliquer efficacement vos propres noms de colonnes sans devoir renommer manuellement chaque variable, surtout si le fichier en contient des dizaines ? Voici deux approches : la méthode rapide pour quelques variables, et l'automatisation complète pour les gros fichiers.

1. La Méthode Standard (PROC IMPORT + RENAME)

Si vous avez peu de colonnes, la solution la plus simple consiste à importer le fichier tel quel, puis à renommer les variables a posteriori.

Étape 1 : Importation brute

Utilisez l'option GETNAMES=NO pour indiquer à SAS© que la première ligne contient déjà des données.

1FILENAME LOC DISK '/workspace/workbench/myorg/data/home/olddatatoimport.txt';
2 
3PROC IMPORT DATAFILE=LOC
4 DBMS=DLM
5 OUT=WORK.NEWDATA
6 REPLACE;
7 DELIMITER=','; /* ou '09'x pour tabulation */
8 GETNAMES=NO; /* Crucial : évite de perdre la 1ère ligne de données */
9RUN;

Étape 2 : Renommage manuel

Utilisez PROC DATASETS pour modifier les noms sans re-lire toutes les données (très rapide même sur des gros volumes).

1PROC DATASETS library=WORK nolist;
2 modify NEWDATA;
3 rename
4 VAR1 = State
5 VAR2 = City
6 VAR3 = Population;
7QUIT;

2. La Méthode Automatisée (Renommage Dynamique)

Si vous avez 50 ou 100 colonnes listées dans un document externe, la méthode manuelle est fastidieuse et source d'erreurs. Voici comment automatiser le processus en générant dynamiquement l'instruction RENAME.

Le Concept

  1. Importer le fichier de données avec les noms génériques (VAR1, VAR2...).

  2. Importer la liste des noms de colonnes (copiée depuis votre document Word/Excel) dans une table SAS©.

  3. Utiliser un Data Step pour construire une macro-variable contenant la paire VAR1=NouveauNom VAR2=AutreNom.

  4. Appliquer cette macro dans PROC DATASETS.

Le Code Complet

Phase A : Créer la table des noms Copiez votre liste de colonnes depuis Word et collez-la dans le code ci-dessous :

1/* Table contenant vos noms de colonnes dans l'ordre du fichier */
2DATA column_names;
3 LENGTH new_name $32;
4 INPUT new_name;
5 DATALINES;
6State
7City
8ZipCode
9Population
10Revenue
11/* ... collez votre liste ici ... */
12;
13RUN;

Phase B : Générer le script de renommage Ce code parcourt la liste des noms et construit une chaîne de caractères du type : VAR1=State VAR2=City ...

1DATA _null_;
2 SET column_names END=last;
3
4 LENGTH rename_list $32000;
5 retain rename_list;
6
7 /* On concatène : "VAR" + numéro de ligne = "Nouveau Nom" */
8 /* cats('VAR', _n_) génère VAR1, VAR2, etc. basée sur le numéro de ligne */
9 rename_list = catx(' ', rename_list, catx('=', cats('VAR',_n_), new_name));
10
11 /* À la fin, on stocke tout dans une variable macro &PAIRES_RENAME */
12 IF last THEN call symputx('PAIRES_RENAME', rename_list);
13RUN;
14 
15/* Vérification dans le journal */
16%put &PAIRES_RENAME;

Phase C : Appliquer le changement

1/* Importation des données brutes */
2PROC IMPORT datafile='/chemin/mon_fichier.txt' dbms=dlm out=work.raw_data replace;
3 getnames=no;
4RUN;
5 
6/* Renommage éclair */
7PROC DATASETS library=work nolist;
8 modify raw_data;
9 rename &PAIRES_RENAME;
10QUIT;

Alternative : L'étape DATA (Contrôle Total)

Si votre fichier est complexe (dates spécifiques, formats numériques particuliers), PROC IMPORT peut parfois mal deviner les types de données. Dans ce cas, la méthode la plus robuste est d'écrire une étape DATA classique.

Au lieu de laisser SAS© deviner VAR1, VAR2, vous déclarez directement vos variables :

1DATA work.newdata;
2 INFILE '/workspace/workbench/myorg/data/home/olddatatoimport.txt'
3 dsd /* Gère les délimiteurs et les valeurs manquantes */
4 dlm=',' /* Délimiteur */
5 truncover; /* Évite les erreurs si une ligne est trop courte */
6
7 /* Définissez vos noms et types ici */
8 INPUT
9 State :$2.
10 City :$50.
11 Population :best.
12 Revenue :comma10.;
13RUN;
  • Pour un besoin rapide : PROC IMPORT (GetNames=No) + PROC DATASETS.

  • Pour un grand nombre de colonnes : Automatisation via Macro-Variable.

  • Pour un contrôle précis des types : DATA Step avec INPUT.