Pour changer l’ordre des variables dans un jeu de données, il faut demander à SAS de relire l’intégralité des données dans l’ordre souhaité. Deux méthodes sont disponibles : un data step ou une procédure SQL. Dans le cas particulier où les variables sont à afficher par ordre alphabétique, on pourra extraire la liste des variables des dictionnaires SAS et la sauvegarder dans une macro variable.
Je vous propose donc de voir l’approche avec le data step, puis celle avec la PROC SQL et enfin d’ajouter un exemple particulier utilisant en plus les dictionnaires.
1. Définir la séquence des variables dans un data step : l’ordre de lecture des noms de variables déterminera l’ordre d’apparition dans le jeu de données.
1.1 Une instruction INPUT : Dans l’exemple ci-dessous, où seule l’instruction INPUT est utilisée, la variable YR02 apparaît en premier suivie de YR00, YR99 et YR01.
data one;
input yr02 1–9 date9. yr00 11–20 date9. yr99 yr01 $;
datalines;
02APR2002 21FEB2001 3.52 C
;
run;
1.2 Les instructions RETAIN, FORMAT, INFORMAT, LABEL, ATTRIB : maintenant, on ajoute avant l’instruction INPUT des instructions RETAIN, FORMAT, INFORMAT, LABEL et ATTRIB. Ainsi, on voit que ces instructions affectent l’ordre d’apparition des variables : YR98, YR99,… YR02.
data one;
retain yr98 ‘REF’;
format yr99 best.;
informat yr00 date9.;
label yr01=‘Annee 2001’;
attrib yr02 format=date9.
informat=date9.
label=‘Annee 2002’;
input yr02 yr00 yr99 yr01 $;
datalines;
02APR2002 21FEB2001 3.52 C
;
run;
1.3 L’instruction SET : de la même manière, l’instruction SET défini l’ordre d’apparition des variables pas encore mentionnées.
2. Lister les variables dans une procédure SQL.
2.1 Lister les variables manuellement : les variables du jeu de données SASHELP.CLASS apparaissent dans l’ordre suivant : NOM, SEX, AGE, HEIGHT et WEIGHT. Pour changer cet ordre, avec une procédure SQL, il faut les lister individuellement. Dans l’exemple qui suit, les variables apparaissent par ordre alphabétique.
proc sql;
create table class as
select age, height, name, sex, weight
from sashelp.class;
quit;
proc sql noprint;
select name into : var_lst separated by ‘, ‘
from dictionary.columns
where upcase(libname)=‘SASHELP’ and
upcase(memname)=‘CLASS’
order by name;
create table class as
select &var_lst.
from sashelp.class;
quit;