[ 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;