[ Retour aux Travaux Dirigés de SAS ]

/* Statistiques avec SAS, Corrigé du TD 4 */
/* Jean-Sebastien Roy (js@jeannot.org), 2000-2001 */

/* test d'égalité de moyennes */

%let chemin=//diamant/Data Mi2/sas/stats;
libname tables "&chemin/tables";

/* On selectione les observations interessantes et on trie par wday
   L'option keep= permet de ne garder que certaines variables
 */


proc sort data=tables.q0cal out=q0calt(keep=q0 wday) noequals;
  where tday in ('O'and wday in (4,5);
  by wday;
run;

proc format;
  value jour
    1='Dimanche'
    2='Lundi'
    3='Mardi'
    4='Mercredi'
    5='Jeudi'
    6='Vendredi'
    7='Samedi'
  ;
run;

/* On teste la normalité de q0 par jour de la semaine
   Noter l'utilisation d'un format local à la procédure.
 */

proc univariate data=q0calt normal;
  format wday jour.;
  var q0;
  by wday;
run;
/* La p-Value est << 0.05 : on refuse "H0 : q0 est normal" */
/* Mais le test de student est robuste :
   bcp d'obs, ne pas se préocuper des lois ni des variances */


/* Avec Insight */
proc insight data=q0calt;
  by wday;
  dist q0;
run;

proc ttest data=q0calt;
  format wday jour.;
  class wday;
  var q0;
run;

/* Verification experimentale du theoreme central limite */
/* Représentation des distributions */
data dist; /* tirage de variables selon 3 lois */
  obs=100000;
  do i=1 to obs;
    uni=ranuni(0);
    exp=ranexp(0);
    cau=rancau(0);
    output;
  end;
  keep uni exp cau;
run;

proc insight data=dist tools/* distribution des variables uni, exp et cau */
  dist uni exp cau;
run;

data tcl; /* tirage de moyennes de variables iid */
  obsm=5000;
  obs=1000;
  do i=1 to obsm;
    uni=0;exp=0;cau=0;
    do j=1 to obs;
      uni=uni+ranuni(0); /* ranuni -> E=1/2 V=1/12 */
      exp=exp+ranexp(0);
      cau=cau+rancau(0);
    end;
    unistd=((uni/obs)-0.5)*sqrt(obs*12); /* ~> LG(0,1) */
    output;
  end;
  keep uni unistd exp cau;
run;

proc univariate data=tcl normal/* test de normalité pour uni, unistd, exp et cau */
  var uni unistd exp cau;
run;

proc insight data=tcl; /* distribution des variables uni, unistd, exp et cau */
  dist uni exp cau;
run;

/* Mise en forme dans un Tableau pour excel */

data q0xl1;
  set tables.q0;

  date=datepart(dtu);
  tp=timepart(dtu);
  dh=hour(tp)*2+minute(tp)/30;

  format date ddmmyy10.;
  keep date dh q0;
run;

proc transpose data=q0xl1 out=q0xl(drop=_name_prefix=DH_;
  by date;
  var q0;
  id dh;
run;