Ce script illustre une problématique courante : la modification de la longueur d'une variable change souvent sa position dans la table (elle se retrouve à la fin). La solution proposée utilise les métadonnées (SASHELP.VCOLUMN) pour capturer l'ordre initial des variables, puis utilise l'instruction RETAIN dans un DATA step combinée à une instruction LENGTH pour appliquer le changement de format tout en forçant l'ordre des colonnes défini par la macro-variable.
Analyse des données
Type : SASHELP
Utilise la table exemple 'sashelp.cars' comme source de données et 'sashelp.vcolumn' pour les métadonnées de structure.
1 Bloc de code
DATA STEP Data
Explication : Création d'une table de travail 'cars' (dans la bibliothèque WORK) à partir d'un sous-ensemble de colonnes de 'sashelp.cars'.
Copié !
data cars;
set sashelp.cars (keep=Make Model Type Origin Drivetrain);
run;
1
2
DATA cars;
3
SET sashelp.cars (keep=Make Model Type Origin Drivetrain);
4
RUN;
5
2 Bloc de code
PROC SQL
Explication : Extraction de la liste des noms de variables de la table 'cars' depuis le dictionnaire des données (VCOLUMN), stockée dans la macro-variable ':varlist' pour conserver l'ordre actuel.
Copié !
proc sql noprint;
select name into :varlist separated by ' '
from sashelp.vcolumn
where upcase(libname) eq 'WORK' and upcase(memname) eq 'CARS';
quit;
1
PROC SQL noprint;
2
select name into :varlist separated BY' '
3
from sashelp.vcolumn
4
where upcase(LIBNAME) eq 'WORK' and upcase(memname) eq 'CARS';
5
QUIT;
3 Bloc de code
DATA STEP Data
Explication : Reconstruction de la table 'cars'. L'instruction RETAIN (utilisant la liste des variables récupérée précédemment) force l'ordre des colonnes. L'instruction LENGTH modifie la taille de la variable 'Type' de 8 à 10 caractères.
Copié !
data cars;
retain &varlist;
length Type $10;
set cars;
run;
1
DATA cars;
2
retain &varlist;
3
LENGTH Type $10;
4
SET cars;
5
RUN;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : Author(s) : Nicolas DUPONT, Date : 22/04/2017
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.