Tutoriel SAS Viya : Importer un fichier texte sans en-tête et renommer les colonnes dynamiquement
Simon 8 vistas
Nivel de dificultad
Débutant
Publicado el :
Consejo del experto
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.
Aviso importante
Los códigos y ejemplos proporcionados en WeAreCAS.eu son con fines educativos. Es imperativo no copiarlos y pegarlos ciegamente en sus entornos de producción. El mejor enfoque es comprender la lógica antes de aplicarla. Recomendamos encarecidamente probar estos scripts en un entorno de prueba (Sandbox/Dev). WeAreCAS no acepta ninguna responsabilidad por cualquier impacto o pérdida de datos en sus sistemas.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.