SAS:使用do宏创建滞后变量

时间:2014-08-20 15:00:38

标签: sas sas-macro

我正在尝试创建4个新的滞后变量,每个变量都会增加额外的延迟。下面的代码只生成最终的滞后变量,即在运行此代码后,有一个名为lag_4的新变量,但不会创建lag_1,lag_2和lag_3。感谢

%macro makelags; 
%do i=1 %to 4;
data work.test1;
   set work.dataset;
   lag_&i = lag&i(id_number);
run;
%end;
%mend makelags;
%makelags;

2 个答案:

答案 0 :(得分:2)

您需要在数据步骤内循环,而不是在数据步骤之外。

如果你要循环:

data work.test1;
  set work.dataset;
  %do i = 1 %to 4;
    lag_&i. = lag&i.(id_number);
  %end;
run;

(整个datastep可以在宏内,或只是%do循环)。

我的方式,如果我需要一个宏(因为,例如,滞后的数量不同):

%macro lagme(num_lags=);
  %do _i = 1 %to &num_lags.;
     lag_&_i. = lag&_i.(id_number);
  %end;
%mend lagme;

data mydata;
  set olddata;
  %lagme(num_lags=4);
run;

答案 1 :(得分:1)

您的代码覆盖数据集test1 4次,仅保留上次%do次迭代创建的版本。 尝试在数据步骤中移动%do循环:

data work.test1;
   set work.dataset;
   %do i=1 %to 4;
      lag_&i = lag&i(id_number);
   %end;
run;