[ Retour aux Travaux Dirigés de SAS ]

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

/* Définition d'une macro-variable */
%let chemin=//diamant/Data Mi2/sas/stats;

/* Dorénavant, &chemin. sera systematiquement remplacé par D:\SAS\MST
   Même entre des "..." mais pas entre des '...'.
 */


/* Definition de la Library 'tables' */
libname tables "&chemin/tables";

/* Monotone de charge de Q0 */

/* On trie la table q0 par puissances (q0) décroissantes */
/* Et on ne garde que q0 */
proc sort data=tables.q0 out=q0_decr(keep=q0);
  by descending q0;
run;

/* On numérote les lignes */
/* Lors d'une étape DATA,
   _n_ est toujours égal au numéro de la ligne.
   SAS ne conserve pas cette variable dite 'automatique'.
   Pour la conserver, on l'affecte à une autre variable, ici 'i'
*/

data q0_decr;
  set q0_decr;
  i=_n_;
run;

proc gplot data=q0_decr;
  format q0 comma15.;
  axis1 value=(height=1);
  symbol1 h=0.1cm value=plus c=black;
  title1 h=1 "Monotone de charge";
  plot q0*i=1/haxis=axis1;
run;
quit;

/* Impression */

goptions device=winprtm rotate=landscape;

proc gplot data=q0_decr;
  format q0 comma15.;
  axis1 value=(height=1);
  symbol1 h=0.1cm;
  title1 h=1 "Monotone de charge";
  plot q0*i=1/haxis=axis1;
run;
quit;

goptions device=win;

/* Utilisation de formats */

/* Lecture du fichier calendrier */

/* De maniere similaire a la commande 'libname',
   la commande filename associe un nom (ici 'cal') a un fichier */

filename cal "&chemin/infiles/Angleterre";

/* %include "fichier.sas" execute le contenu de fichier.sas */
%include "&chemin/td2_lecture_cal.sas";

/* Creation d'un variable DATE dans la table q0 */

data q0_1;
  set tables.q0;

  date=datepart(dtu); /* La date sans l'heure */

  format date ddmmyy10.;
run;

/* Moyenne de q0 par jour */
proc summary data=q0_1 nway;
  by date;
  var q0;
  output out=q0_date(drop=_type_ _freq_mean=;
run;

/* Lien Q0_DATE <-> Calendrier */

data q0_date2;
  merge q0_date (in=inq0)
        cal (in=incal);
  by date;

  if inq0 and incal; /* Informations présentes dans les deux tables seulement*/
run;

/* Définition du format */
proc format;
  value $tjour
    'D'='Dimanche / F'
    'S'='Samedi'
    'V'='Vendredi / Veille JF'
    'L'='Lundi / Lendemain JF'
    'O'='Autre'
  ;
  value jour
    1='Dimanche'
    2='Lundi'
    3='Mardi'
    4='Mercredi'
    5='Jeudi'
    6='Vendredi'
    7='Samedi'
  ;
  value $cjour
    '4'='Jour Ferié'
    '5'='Lendemain de JF'
    '3'='Lundi normal'
    '0'='Mardi-Vendredi normal'
    '1'='Samedi normal'
    '2'='Dimanche normal'
    '7'='Veille de JF'
    '9'='Invalide'
  ;
run;

/* Affectation du format à la variable */
proc datasets lib=work;
  modify cal;
    format tday $tjour.  wday jour. cday $cjour.;
  modify q0_date2;
    format tday $tjour. wday jour. cday $cjour.;
run;
quit;


/* Utilisation d'INSIGHT */

proc insight data=q0_date2 tools;
  dist q0;
  dist tday;
  scatter q0*date; /* a colorier */
  line q0*date;
  box q0*tday;
  by tday;
  line q0*date; /* rajouter d'autres variables */
  dist q0;
run;

/* Travail similaire sur la table pool */

/* Creation d'un variable DATE dans la table pool */
/* Creation d'une variable jour de la semaine dans q0_date */

data pool1;
  set tables.pool;

  date=datepart(dtu); /* La date sans l'heure */

  format date ddmmyy10.;
run;

data pool2;
  merge pool1 (in=inpool1) cal (in=incal);
  by date;
  if incal and inpool1;
run;

/* Utilisation d'INSIGHT */

proc insight data=pool2 tools;
  dist smp ppp;
  scatter q0*smp;
run;