我正在尝试创建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;
答案 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;