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 :
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
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.
FILENAME LOC DISK '/workspace/workbench/myorg/data/home/olddatatoimport.txt';
PROC IMPORT DATAFILE=LOC
DBMS=DLM
OUT=WORK.NEWDATA
REPLACE;
DELIMITER=','; /* ou '09'x pour tabulation */
GETNAMES=NO; /* Crucial : évite de perdre la 1ère ligne de données */
RUN;
1
FILENAME LOC DISK '/workspace/workbench/myorg/data/home/olddatatoimport.txt';
2
3
PROC 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 */
9
RUN;
É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).
proc datasets library=WORK nolist;
modify NEWDATA;
rename
VAR1 = State
VAR2 = City
VAR3 = Population;
quit;
1
PROC DATASETS library=WORK nolist;
2
modify NEWDATA;
3
rename
4
VAR1 = State
5
VAR2 = City
6
VAR3 = Population;
7
QUIT;
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
Importer le fichier de données avec les noms génériques (VAR1, VAR2...).
Phase A : Créer la table des noms
Copiez votre liste de colonnes depuis Word et collez-la dans le code ci-dessous :
/* Table contenant vos noms de colonnes dans l'ordre du fichier */
data column_names;
length new_name $32;
input new_name;
datalines;
State
City
ZipCode
Population
Revenue
/* ... collez votre liste ici ... */
;
run;
1
/* Table contenant vos noms de colonnes dans l'ordre du fichier */
2
DATA column_names;
3
LENGTH new_name $32;
4
INPUT new_name;
5
DATALINES;
6
State
7
City
8
ZipCode
9
Population
10
Revenue
11
/* ... collez votre liste ici ... */
12
;
13
RUN;
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 ...
data _null_;
set column_names end=last;
length rename_list $32000;
retain rename_list;
/* On concatène : "VAR" + numéro de ligne = "Nouveau Nom" */
/* cats('VAR', _n_) génère VAR1, VAR2, etc. basée sur le numéro de ligne */
rename_list = catx(' ', rename_list, catx('=', cats('VAR',_n_), new_name));
/* À la fin, on stocke tout dans une variable macro &PAIRES_RENAME */
if last then call symputx('PAIRES_RENAME', rename_list);
run;
/* Vérification dans le journal */
%put &PAIRES_RENAME;
1
DATA _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 */
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.
data work.newdata;
infile '/workspace/workbench/myorg/data/home/olddatatoimport.txt'
dsd /* Gère les délimiteurs et les valeurs manquantes */
dlm=',' /* Délimiteur */
truncover; /* Évite les erreurs si une ligne est trop courte */
/* Définissez vos noms et types ici */
input
State :$2.
City :$50.
Population :best.
Revenue :comma10.;
run;
Pour un grand nombre de colonnes : Automatisation via Macro-Variable.
Pour un contrôle précis des types : DATA Step avec INPUT.
Important Disclaimer
The codes and examples provided on WeAreCAS.eu are for educational purposes. It is imperative not to blindly copy-paste them into your production environments. The best approach is to understand the logic before applying it. We strongly recommend testing these scripts in a test environment (Sandbox/Dev). WeAreCAS accepts no responsibility for any impact or data loss on your systems.
SAS and all other SAS Institute Inc. product or service names are registered trademarks or trademarks of SAS Institute Inc. in the USA and other countries. ® indicates USA registration. WeAreCAS is an independent community site and is not affiliated with SAS Institute Inc.
This site uses technical and analytical cookies to improve your experience.
Read more.