我有一个面板数据,每个时间序列的每个ID都有不同的开始和结束日期。我想对每个带有10个obs的ID进行滚动回归。我想知道如何编写循环来完成它。例如,对于每个ID,我希望从第一个blind 19880831-19910228以及然后从第二个obs 19890228-19910531开始回归,依此类推,直到该ID的最后日期为止。但是,每个ID都有不同的开始和结束日期。谢谢。
答案 0 :(得分:0)
考虑使用嵌套do
循环的以下宏。外循环每10次遍历面板ID和内循环跳过,以按行号_N_
过滤数据。然后将回归结果保存到单个一行results
数据集中,后缀为id和10的当前倍数。确保更改循环限制,( 50 , 1000 )以容纳数据。
%macro rollingregression;
%do i = 1 %to 50; ** ID LOOP;
%do j = 1 %to 1000; ** OBS LOOP;
data new_data;
set current_data;
if ID = &i;
if _N_ >= &j & _N_ <= (&j + 9);
run;
proc reg data = new_data noprint outest=results&i&j;
model y = x1 x2 x3;
quit;
%end;
%end;
%mend rollingregression;
%rollingregression;