我一直在努力寻找在SAS中生成模拟时间序列数据集的最简单方法。我最初正在尝试使用LAG操作符,但这需要输入数据,因此可能不是最好的方法。 (见这个问题:SAS: Using the lag function without a set statement (to simulate time series data.))
是否有人开发了一个宏或数据集,可以使用任意数量的AR和MA术语对时间序列进行生成?这样做的最佳方式是什么?
具体而言,我希望生成SAS称为ARMA(p,q)过程的内容,其中p表示自回归分量(因变量的滞后值),q是移动平均分量(误差项的滞后值。)
非常感谢。
答案 0 :(得分:0)
我已经开发了一个宏来尝试回答这个问题,但我不确定这是否是最有效的方法。无论如何,我认为这可能对某人有用:
%macro TimeSeriesSimulation(numDataPoints=100, model=y=e,outputDataSetName=ts, maxLags=10);
data &outputDataSetName (drop=j);
array lagy(&maxlags) _temporary_;
array lage(&maxlags) _temporary_;
/*Initialise values*/
e = 0;
y=0;
t=1;
do j = 1 to 10;
lagy(j) = 0;
lage(j) = 0;
end;
output;
do t = 2 to &numDataPoints; /*Change this for number of observations*/
/*SPECIFY MODEL HERE*/
e = rannorm(-1); /*Draw from a N(0,1)*/
&model;
/*Update values of lags on the moving average and autoregressive terms*/
do j = &maxlags-1 to 1 by -1; /*Note you have to do this backwards because otherwise you cascade the current value to all past values!*/
lagy(j+1) = lagy(j);
lage(j+1) = lage(j);
end;
lagy(1) = y;
lage(1) = e;
output;
end;
run;
%mend;
/*Example 1: Unit root*/
%TimeSeriesSimulation(numDataPoints=1000, model=y=lagy(1)+e)
/*Example 2: Simple process with AR and MA components*/
%TimeSeriesSimulation(numDataPoints=1000, model=y=0.5*lagy(1)+0.5*lage(1)+e)