我想创建包含大量滞后的给定变量的滞后值的变量。我怎么能这样做?我尝试以下方法:
data out;
set in;
do i = 1 to 50;
%let j = i;
lag_&j = Lag&j.(x);
end;
run;
如何将循环变量i
放入宏变量j
或如何直接使用它来创建适当命名的变量和滞后函数?
答案 0 :(得分:5)
Chris J回答了这个问题,但在这里我将提供我这样做的首选方法。
%macro lagvar(var=,num=);
%do _iter = 1 %to &num.;
lag_&_iter. = lag&_iter.(&var.);
%end;
%mend lagvar;
data out;
set in;
%lagvar(var=x,num=50); *semicolon optional here;
run;
这是宏循环的更模块化使用(并且更具可读性,假设您使用智能名称 - 上面没关系,如果您想要非常清楚,可以使用名称做更多,当然还要添加注释)。
答案 1 :(得分:3)
你正在混合宏观& datastep语法错误...
您需要一个宏循环(%DO
而不是do
)来生成datastep代码(即lag1-lag50),并且宏循环需要在宏内。
%MACRO LAGLOOP ; data out ; set in ; %DO J = 1 %TO 50 ; lag_&J = lag&J(x) ; %END ; run ; %MEND ; %LAGLOOP ;