SAS Do循环:在循环内使用循环变量来创建滞后变量

Inf*_*nce 2 sas sas-macro

我想创建包含大量滞后的给定变量的滞后值的变量.我怎么能这样做?我尝试以下方法:

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函数?

Joe*_*Joe 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;
Run Code Online (Sandbox Code Playgroud)

这是宏循环的更模块化使用(并且更具可读性,假设您使用智能名称 - 上面没关系,如果您想要非常清楚,您可以使用名称做更多,当然还要添加注释).