Pour personnaliser une sortie statistique générée par une procédure SAS, il faut parfois convertir ses résultats en tableau (SAS data set). Dans un précédent article, la procédure PROC MEANS a été mise à l’honneur (Diriger la sortie d’un PROC MEANS dans un dataset SAS). Maintenant nous abordons la procédure PROC FREQ dans le cadre d’un tableau à une dimension en combinaison avec l’instruction ODS OUTPUT.
1. Identifier le nom des sorties : un exemple avec une variable
ods trace on/listing;
*Exemple 1 : Proc Freq, une variable;
proc freq data=sashelp.class;
table age;
run;
ods trace off;
On obtient deux types de tables selon qu’il s’agisse d’un tableau à une dimension ou à plusieurs dimensions.
- OneWayFreqs: Dans le cas d’un PROC FREQ avec une seule variable, on parle de OneWayFreqs.
- CrossTabFreqs: Dans le cas d’un tableau croisé, la sortie se nomme CrossTabFreqs.
Output Added:
————-
Name: OneWayFreqs
Label: One-Way Frequencies
Template: Base.Freq.OneWayFreqs
Path: Freq.Table1.OneWayFreqs
————-
1. Identifier le nom des sorties : un exemple avec 2 variables
Dans ce second exemple, deux variables (AGE et SEX) sont listées. Les statistiques de l’une seront indépendantes des statistiques de l’autre.
ods trace on/listing;
*Exemple 2 : Proc Freq, deux variables;
proc freq data=sashelp.class;
table age sex;
run;
ods trace off;
Pour distinguer les statistiques de la table SEX de celles de la table AGE, deux outputs sont créés dans la fenêtre OUTPUT. Leur nom (NAME) est identique mais leur chemin d’accès (PATH) varie. On parle de TABLE1 et TABLE2.
Output Added:
————-
Name: OneWayFreqs
Label: One-Way Frequencies
Template: Base.Freq.OneWayFreqs
Path: Freq.Table1.OneWayFreqs
————-
Output Added:
————-
Name: OneWayFreqs
Label: One-Way Frequencies
Template: Base.Freq.OneWayFreqs
Path: Freq.Table2.OneWayFreqs
————-
3. Identifier le nom des sorties : un exemple avec une instruction BY
Avant de se servir d’une instruction BY, les données doivent être triées. La procédure PROC SORT le fait.
Le data set source est un data set non modifiable. C’est un data set de la bibliothèque SASHELP fournit avec le logiciel SAS.
La version triée est sauvegardée de manière temporaire dans la bibliothèque WORK (bibliothèque par défaut quand son nom n’est pas cité). Ce nouveau dataset s’appelle CLASS.
proc sort data=sashelp.class out=class;
by sex;
run;
ods trace on/listing;
*Exemple 3 : Proc Freq, une variable et une instruction BY;
proc freq data=class;
by sex;
table age;
run;
ods trace off;
Avec une instruction BY, il y a plusieurs outputs pour une seule procédure dans la fenêtre OUTPUT. Les deux sorties ont le même nom (NAME) mais le chemin d’accès (PATH) est différent. On parle de TABLE1 dans les deux cas et de BYGROUP1 et BYGROUP2 pour les distinguer.
Output Added:
————-
Name: OneWayFreqs
Label: One-Way Frequencies
Template: Base.Freq.OneWayFreqs
Path: Freq.ByGroup1.Table1.OneWayFreqs
————-
Output Added:
————-
Name: OneWayFreqs
Label: One-Way Frequencies
Template: Base.Freq.OneWayFreqs
Path: Freq.ByGroup2.Table1.OneWayFreqs
————-
4. ODS OUTPUT et PROC FREQ
L’instruction ODS OUTPUT convertit les sorties dans un data set SAS. Voici donc le résultat de trois PROC PRINT sur les data sets créés avec l’instruction ODS OUTPUT.
4.1 Exemple 1, tableau avec une variable
Dans ce premier exemple, on note, d’une part, la présence de la variable caractère TABLE ; d’autre part, deux variables listent les différentes valeurs prises par la variable AGE : l’une est caractère, l’autre est numérique.
*Exemple 1 : Proc Freq, une variable;
proc freq data=sashelp.class;
table age;
ods output onewayfreqs=exemple1;
run;
Cum Cum
Table F_Age Age Frequency Percent Frequency Percent
Table Age 11 11 2 10.53 2 10.53
Table Age 12 12 5 26.32 7 36.84
Table Age 13 13 3 15.79 10 52.63
Table Age 14 14 4 21.05 14 73.68
Table Age 15 15 4 21.05 18 94.74
Table Age 16 16 1 5.26 19 100.00
4.2 Exemple 2, tableau avec deux variables
En ajoutant une deuxième variable SEX, des variables supplémentaires sont ajoutées dans la table de sortie. Elles listent les valeurs prises par la variable supplémentaire. Comme précédemment avec la variable AGE, il y a deux variables pour accéder à la fois à l’information sous forme caractère et sous forme numérique a priori. Mais comme ici la variable d’origine est caractère, les deux sont de type caractère.
*Exemple 2 : Proc Freq, deux variables;
proc freq data=sashelp.class;
table age sex;
ods output onewayfreqs=exemple2;
run;
Cum Cum
Table F_Age Age Frequency Percent Frequency Percent F_Sex Sex
Table Age 11 11 2 10.53 2 10.53
Table Age 12 12 5 26.32 7 36.84
Table Age 13 13 3 15.79 10 52.63
Table Age 14 14 4 21.05 14 73.68
Table Age 15 15 4 21.05 18 94.74
Table Age 16 16 1 5.26 19 100.00
Table Sex . 9 47.37 9 47.37 F F
Table Sex . 10 52.63 19 100.00 M M
4.3 Exemple 3, tableau avec une instruction BY
Avec l’instruction BY, une seule variable est créée pour distinguer les âges des hommes de ceux des femmes.
*Exemple 3 : Proc Freq, une variable et une instruction BY;
proc freq data=class;
by sex;
table age;
run;
Cum Cum
Sex Table F_Age Age Frequency Percent Frequency Percent
F Table Age 11 11 1 11.11 1 11.11
F Table Age 12 12 2 22.22 3 33.33
F Table Age 13 13 2 22.22 5 55.56
F Table Age 14 14 2 22.22 7 77.78
F Table Age 15 15 2 22.22 9 100.00
M Table Age 11 11 1 10.00 1 10.00
M Table Age 12 12 3 30.00 4 40.00
M Table Age 13 13 1 10.00 5 50.00
M Table Age 14 14 2 20.00 7 70.00
M Table Age 15 15 2 20.00 9 90.00
M Table Age 16 16 1 10.00 10 100.00
NOTE : Dans le cas de l’utilisation de plusieurs PROC FREQ se servant du même OUTPUT (onewayfreqs par exemple), il est conseillé de nettoyer l’ODS OUTPUT avec l’option CLEAR.
ods output clear;