首先滚动回归是指在回归的时候,对固定长度的时间窗口进行回归,并一直在时间序列上滚动。典型的应用是股票收益率CAPM模型回归,一般都采用36个月固定长度的数据来回归。下面的程序以此为例,样本包含所有股票的月度股票收益率,因此有股票和时间两个维度:
- proc sort data=stock; /*** 一定要把数据先排序好 ***/
- by stkcd date;
- run;
- DATA rwin / view=rwin;
- array _X {36} _temporary_ ; /*** 创建长度为36的数组,到时候把需要回归的数据放进去 ***/
- array _Y {36} _temporary_ ;
- set stock;
- by stkcd;
- retain N 0; /*** 利用N来识别不同股票,否则不同股票的数据会进入同一个数组,造成混乱 ***/
- N = ifn(first.stkcd,1,N+1); /*** 对于同一只股票,N按照时间顺序逐步+1,到下一只股票时,N重设为1 ***/
- I=mod(N-1,36)+1; /*** I用来获取数组中的位置;这三行的意思是,将头36个数据放入数组 ***/
- _X{I}=ret;
- _Y{I}=rm;
- if N>=36 then do I= 1 to 36; /*** 从第37个观测开始,数组自动往下移一位,将最早的观测剔除,加入最新的观测 ***/
- ret=_X{I};
- rm=_Y{I};
- output;
- end;
- run;
- proc reg data=rwin noprint outest=outvar; /*** 最后回归,获取回归结果 ***/
- by stkcd date;
- model ret=rm;
- quit;
英文原文中还有其他方法,感兴趣可看原文 :