[ Retour aux Travaux Dirigés de SAS ]
/* Séries temporelles avec SAS, Corrigé du TD 3 : Désaisonnalisation */
/* Jean-Sebastien Roy (js@jeannot.org), 2000-2001 */
%let chemin=//diamant/Data Mi2/sas/series_roy;
libname tables "&chemin/tables";
 
/* A la main */
data y;
  set tables.sales;
  m=month(t);
  y=log(x);
run;
proc expand y tc;
  id t;
  convert y=tc / (cmovave 12 cmovave 2);
run;
data si;
  set tc;
  si=y-tc;
run;
/* Sur chaque mois */
proc sort si;
  by m t;
run;
proc expand si s;
  by m;
  id t;
  convert si=s / (cmovave 3 cmovave 3);
run;
proc sort s;
  by t;
run;
proc expand s sm;
  id t;
  convert s=sm / (cmovave 12 cmovave 2);
run;
data sa;
  set sm;
  snorm=s-sm;
  sa=y-snorm;
run;
proc expand sa tc2;
  id t;
  convert sa=h13_p / (cmovave (0 0 0 1100 2475 3600 4032 3600 2475 1100 0 0 0));
  convert sa=h13_n / (cmovave (325 468 0 0 0 0 0 0 0 0 0 468 325));
run;
data tc2;
  set tc2;
  tc2=(h13_p*(+1100 +2475 +3600 +4032 +3600 +2475 +1100)
      -h13_n*(+325 +468 +468 +325))/16796;
run;
data si2;
  set tc2;
  si2=y-tc2;
run;
proc sort si2;
  by m t;
run;
proc expand si2 s2;
  by m;
  id t;
  convert si2=s2 / (cmovave 3 cmovave 5);
run;
proc sort s2;
  by t;
run;
proc expand s2 sm2;
  id t;
  convert s2=sm2 / (cmovave 12 cmovave 2);
run;
data sa2;
  set sm2;
  snorm2=s2-sm2;
  sa2=y-snorm2;
run;
data out;
  set sa2;
  xadj=exp(sa2);
run;
symbol1 i=join c=black v='plus';
symbol2 i=join c=red v='diamond';
symbol3 i=join c=blue v='circle';
proc gplot out;
  plot (x xadj)*t / overlay legend;
run;
quit;
/* Avec X11 */
proc x11 tables.sales ;
  monthly t;
  var x;
  output out2 d11=xadj2;
run;
data out2;
  merge out2 out;
  by t;
run;
proc gplot out2;
  plot (x xadj xadj2)*t / overlay legend;
run;
quit;
/* Creation d'un indicateur conjoncturel */
data jo;
  set tables.jo_am;
  keep mois jo;
run;
proc sql;
  select mean(jo) into :mjo from jo;
quit;
%put WARNING: Nombre moyen de jours ouvrés : &mjo;
data brut;
  set tables.seriesam;
  brut=mhh;
  keep mois brut;
  if brut ne .;
run;
proc gplot brut;
  symbol1 i=join black none;
  symbol2 i=join red none;
  symbol3 i=join blue none;
  symbol4 i=join green none;
  symbol5 i=join orange none;
  plot brut*mois;
run;
quit;
data cjo;
  merge brut jo;
  by mois;
  if brut ne . and jo ne .;
  cjo=brut/jo*&mjo;
  keep mois cjo;
run;
proc x11 cjo ;
    monthly mois none;
    output cs (cjo mois cs) cs;
    id mois cjo;
    var cjo;
run;
data cvs;
  merge cjo cs;
  by mois;
  cvs=100*cjo/cs;
  keep cvs mois;
run;
data ;
  merge  cvs;
  by mois;
run;
proc gplot ;
  plot (brut cvs)*mois / overlay;
run;
quit;
proc forecast
    cvs
    cvsp(_type_ _lead_)
    month 12
    winters
    (0.39,0.1)
    ;
  id mois;
  var cvs;
run;
proc expand cvsp lis;
  id mois;
  convert cvs=lis_h13p / (cmovave (0 0 0 1100 2475 3600 4032 3600 2475 1100 0 0 0));
  convert cvs=lis_h13n / (cmovave (325 468 0 0 0 0 0 0 0 0 0 468 325));
  convert cvs=lis_med / (cmovmed 5 cmovmed 5 cmovave (1 2 2 2 1));
run;
data lis;
  set lis;
    lis_h13=(lis_h13p*(+1100 +2475 +3600 +4032 +3600 +2475 +1100)
      -lis_h13n*(+325 +468 +468 +325))/
      (-325 -468 +1100 +2475 +3600 +4032 +3600 +2475 +1100 -468 -325);
  keep mois lis_h13 lis_med;
run;
data ;
  merge brut cjo cvs lis;
  by mois;
run;
proc gplot ;
  plot (brut cjo cvs lis_h13 lis_med)*mois / overlay legend;
run;
  plot (brut cjo cvs lis_h13 lis_med)*mois / overlay legend;
  where year(mois)>1990;
run;
  plot (cvs lis_h13 lis_med)*mois / overlay legend;
  where year(mois)>1990;
run;
quit;