[ Retour aux Travaux Dirigés de SAS ]
/* Statistiques avec SAS, Corrigé du TD 3 */
/* Jean-Sebastien Roy (js@jeannot.org), 2000 */
%let chemin=//diamant/Data Mi2/sas/stats;
filename donnees "&chemin/infiles";
/* Lecture du fichier don1.txt
L'option firstobs=2 permet de commencer à la 2eme ligne
Si enfant n'est pas renseigné, alors on fixe par défaut
enfant à 0.
*/
data tabdon1;
infile donnees(don1.txt) 2;
input taille 1-4 enfant 6 voiture 8;
if enfant=. then enfant=0;
run;
proc format;
value f1voit
1='0 voiture'
2='1 voiture'
3='2 voitures'
4='1 moto'
5='autre';
value f2voit
1='0 voiture'
2,3='>=1 voiture'
other='autre';
run;
proc freq tabdon1;
tables enfant voiture;
title "PROC FREQ sur une variable quantitative discrète et une variable qualitative";
run;
proc freq tabdon1;
tables voiture;
format voiture f1voit.;
title "PROC FREQ avec format f1voit";
run;
proc freq tabdon1;
tables voiture;
format voiture f2voit.;
title "PROC FREQ avec format f2voit";
run;
proc format;
value ftaille
low -1.59='<1.60'
1.60-1.69='1.60 =- 1.70'
1.70-1.79='1.70 =- 1.80'
1.80-1.89='1.80 =- 1.90'
1.90-high='>=1.90';
run;
proc freq tabdon1;
tables taille;
format taille ftaille.;
title "PROC FREQ sur une variable quantitative discretisée";
run;
proc gchart tabdon1;
format voiture f1voit. taille ftaille.;
title "PROC GCHART : representation graphiques de variables";
title2 "(VBAR)";
pattern1 solid orange;
pattern2 solid green;
pattern3 solid blue;
pattern4 solid cyan;
pattern5 solid pink;
pattern6 solid gray;
vbar taille enfant voiture / black;
run;
title2 "(HBAR)";
hbar taille enfant voiture / black;
run;
title2 "(PIE)";
pie taille enfant voiture / black other=0 percent arrow inside;
run;
quit;
/* Attention pour les options de GCHART :
En anglais FREQUENCY signifie nombre d'observations,
et non pas fréquence (PERCENT en anglais).
*/
proc summary tabdon1 print;
var taille;
title "PROC SUMMARY sur une variable quantitative continue";
run;
proc univariate tabdon1 plot ;
var taille;
title "PROC UNIVARIATE sur une variable quantitative continue avec test de normalité";
run;
proc insight tabdon1;
dist taille;
run;
/* Pour faire une analyse par nombre d'enfant (by enfant),
il faut d'abord trier par nombre d'enfant.
*/
proc sort tabdon1 tabdon1t;
by enfant;
run;
proc univariate tabdon1t;
var taille;
by enfant;
title "PROC UNIVARIATE sur une variable quantitative continue en fonction d'une seconde variable";
run;
/* Il faut faire attention au nombre de points sur lesquels sont calculées les statistiques */
data tabdon2;
infile donnees(don2.txt) 2;
/* On ne precise pas les colonnes lues car la taille est variable : 2 ou 3 colonnes */
input poids;
run;
/* Merge sans 'by' colle les tables << cote à cote >> */
data tabdon12;
merge tabdon1 tabdon2;
run;
proc gplot tabdon12;
plot poids * taille;
title "PROC GPLOT : trace d'un nuage de points";
run;
quit;
proc corr tabdon12;
var taille poids;
title "PROC CORR sur deux variables quantitatives continues";
run;
proc format;
value fpoids
low -49 ='<50'
50 -59 ='50 =- 60'
60 -69 ='60 =- 70'
70 -79 ='70 =- 80'
80 -89 ='80 =- 90'
90 -high='>=90';
run;
proc freq tabdon12;
tables taille * poids / ;
format taille ftaille. poids fpoids.;
title "PROC FREQ : test du khi-2 pour deux variables quantitatives discrétisées";
run;
proc freq tabdon12;
tables enfant * voiture / ;
title "PROC FREQ : test du khi-2 pour deux variables qualitatives";
run;
/* Le test du Khi-deux n'est pas valide ici
car les effectifs par cellule ne sont pas tous supérieurs à 5
Ces deux exemples montrent uniquement la démarche à suivre pour effectuer ce test */
data tabdon3;
infile donnees(don3.txt) 2;
input statut $;
run;
data tabdon23;
merge tabdon12 tabdon3;
ind_enf=enfant>0;
/* Si enfant>0 alors ind_enf=1 sinon ind_enf=0 */
run;
proc freq tabdon23;
tables ind_enf * statut / ;
title "PROC FREQ : test du khi-2 pour deux variables qualitatives";
run;