[ 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) firstobs=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 data=tabdon1;
  tables enfant voiture;
  title "PROC FREQ sur une variable quantitative discrète et une variable qualitative";
run;

proc freq data=tabdon1;
  tables voiture;
  format voiture f1voit.;
  title "PROC FREQ avec format f1voit";
run;

proc freq data=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 data=tabdon1;
  tables taille;
  format taille ftaille.;
  title "PROC FREQ sur une variable quantitative discretisée";
run;

proc gchart data=tabdon1;
  format voiture f1voit. taille ftaille.;
  title "PROC GCHART : representation graphiques de variables";
  title2 "(VBAR)";

  pattern1 value=solid color=orange;
  pattern2 value=solid color=green;
  pattern3 value=solid color=blue;
  pattern4 value=solid color=cyan;
  pattern5 value=solid color=pink;
  pattern6 value=solid color=gray;

  vbar taille enfant voiture / discrete coutline=black;
run;
  title2 "(HBAR)";
  hbar taille enfant voiture / discrete coutline=black;
run;
  title2 "(PIE)";
  pie taille enfant voiture / discrete coutline=black other=0 type=percent value=arrow slice=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 data=tabdon1 print;
  var taille;
  title "PROC SUMMARY sur une variable quantitative continue";
run;

proc univariate data=tabdon1 plot normal;
  var taille;
  title "PROC UNIVARIATE sur une variable quantitative continue avec test de normalité";
run;

proc insight data=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 data=tabdon1 out=tabdon1t;
  by enfant;
run;

proc univariate data=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) firstobs=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 data=tabdon12;
  plot poids * taille;
  title "PROC GPLOT : trace d'un nuage de points";
run;
quit;

proc corr data=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 data=tabdon12;
  tables taille * poids / cellchi2 deviation expected measures chisq;
  format taille ftaille. poids fpoids.;
  title "PROC FREQ : test du khi-2 pour deux variables quantitatives discrétisées";
run;

proc freq data=tabdon12;
  tables enfant * voiture / cellchi2 deviation expected measures chisq;
  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) firstobs=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 data=tabdon23;
  tables ind_enf * statut / cellchi2 deviation expected measures chisq;
  title "PROC FREQ : test du khi-2 pour deux variables qualitatives";
run;