[ Retour aux Travaux Dirigés de SAS ]
/* Séries temporelles avec SAS, Préparation du TD 2 */
/* Jean-Sebastien Roy (js@jeannot.org), 2000-2001 */
%let chemin=//diamant/Data Mi2/sas/series_roy;
libname tables "&chemin/tables";
filename donnees "&chemin/infiles";
/* Format de fichier :
00000000011111111112
12345678901234567890
AAMMDDd c
AA : l'année (si AA<60 alors l'année est 20AA sinon 19AA)
MM : le mois
DD : le jour
d : Alternativement 1 ou 2. Les lignes sont répétées deux fois.
c : CDAY
CDAY:
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
*/
data cal;
length cday $ 1;
infile donnees(France);
input aa 11-12 mm 13-14 dd 15-16 demi 17 cday $ 20;
if demi=1;
if aa<60 then aa=aa+2000;
else aa=aa+1900;
mdy(mm,dd,aa);
format date ddmmyy10.;
keep date cday;
run;
/* Nombre de jours ouvrés par mois */
data vjo;
set cal;
mois=intnx('MONTH',date,0);
format mois MONYY.;
if cday in ('0') then jo=1;
else if cday in ('3') then jo=0.5;
else if cday in ('1') then jo=0.5;
else if cday in ('7','5') then jo=1;
else jo=0;
run;
proc summary vjo ;
by mois;
var jo;
output jo (_type_ _freq_) ;
run;
/* Faire par regression */
/* Autre solution */
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;
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 tables.mhhcvs;
set cvs;
run;
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;