Extending the Independent Variables for Multivariate Forecasts
/*--------------------------------------------------------------------------
SAS Sample Library
Name: esmex04.sas
Description: Example program from SAS/ETS User's Guide,
The ESM Procedure
Title: Extending the Independent Variables for Multivariate Forecasts
Product: SAS/ETS Software
Keys: Exponential Smoothing Models
PROC: ESM
Notes:
--------------------------------------------------------------------------*/
title;
data websites(label="Transactional Internet data");
/*- time variable definition -*/
keep time;
format time datetime.;
label time="Time of Webhit";
starttime = '12mar2000:00:00:00'dt; /*- Sunday -*/
seedtime = 1234321;
/*- cars variable definition -*/
keep cars;
format cars best12.;
label cars="Number of Car Webhits";
seedcar = 1234321;
/*- boats variable definition -*/
keep boats;
format boats best12.;
label boats="Number of Boat Webhits";
seedboat = 1234321;
/*- planes variable definition -*/
keep planes;
format planes best12.;
label planes="Number of Planes Webhits";
seedplane = 1234321;
/*- engines variable definition -*/
keep engines;
format engines best12.;
label engines="Number of Engine Webhits";
seedengine = 1234321;
/*- simulate the data -*/
do day = 1 to 30;
season = abs(4 - mod(day,7));
nhits = ceil(10*ranuni(seedtime));
intv = 24*3600*ranuni(seedtime)/nhits;
do hits = 1 to nhits;
/*- randomly generate the next time -*/
intv = intv + 24*3600*ranuni(seedtime)/nhits;
intv = int(intv);
time = intnx( 'DTDAY', starttime, day );
time = intnx( 'DTSECOND', time, intv );
/*- randomly generate car data -*/
cars = 1000 + 600*day + 1000*season
+ 10*rannor(seedcar);
cars = int(cars);
/*- randomly generate boats data -*/
boats = 1000 + 1000*season +
+ 10*rannor(seedboat);
boats = int(boats);
/*- randomly generate planes data -*/
planes = 1000 - 10*day +
+ 10*rannor(seedplane);
planes = int(planes);
/*- randomly generate engines data -*/
engines = 1000 + 1*cars - 2*boats + 4*planes
+ 10*rannor(seedengine);
engines = int(engines);
output;
end;
end;
run;
proc esm data=websites out=nextweek lead=7;
id time interval=dtday accumulate=total;
forecast engines / model=none;
forecast boats / model=seasonal;
forecast cars / model=multwinters;
forecast planes / model=addwinters transform=log;
run;
proc autoreg data= nextweek;
model engines = boats cars planes / noprint;
output out=enginehits p=predicted;
run;
title1 "Website Data";
proc sgplot data=enginehits;
series x=time y=boats / markers
markerattrs=(symbol=circlefilled color=red)
lineattrs=(color=red);
series x=time y=cars / markers
markerattrs=(symbol=asterisk color=blue)
lineattrs=(color=blue);
series x=time y=planes / markers
markerattrs=(symbol=circle color=styg)
lineattrs=(color=styg);
scatter x=time y=predicted / markerattrs=(symbol=plus color=black);
refline '11APR2000:00:00:00'dt / axis=x;
xaxis values=('13MAR2000:00:00:00'dt to '18APR2000:00:00:00'dt by dtweek);
yaxis label='Websites' minor;
run;