我想创建包含大量滞后的给定变量的滞后值的变量.我怎么能这样做?我尝试以下方法:
data out;
set in;
do i = 1 to 50;
%let j = i;
lag_&j = Lag&j.(x);
end;
run;
Run Code Online (Sandbox Code Playgroud)
如何将循环变量i放入宏变量j或如何直接使用它来创建适当命名的变量和Lag函数?
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;
Run Code Online (Sandbox Code Playgroud)
这是宏循环的更模块化使用(并且更具可读性,假设您使用智能名称 - 上面没关系,如果您想要非常清楚,您可以使用名称做更多,当然还要添加注释).