SAS Do循环:在循环内使用循环变量创建滞后变量
我想为大量滞后创建包含给定变量滞后值的变量。我怎么能这样做?我尝试以下方法:SAS Do循环:在循环内使用循环变量创建滞后变量,sas,sas-macro,Sas,Sas Macro,我想为大量滞后创建包含给定变量滞后值的变量。我怎么能这样做?我尝试以下方法: data out; set in; do i = 1 to 50; %let j = i; lag_&j = Lag&j.(x); end; run; 如何将循环变量I放入宏变量j,或者如何直接使用它来创建适当命名的变量和滞后函数?您将宏和数据步骤语法错误地混合在一起 您需要一个宏循环(%DO而不是DO)来生成数据步代码(即lag1-lag50),宏循环需要在宏中 %MACRO LAGLOOP ;
data out;
set in;
do i = 1 to 50;
%let j = i;
lag_&j = Lag&j.(x);
end;
run;
如何将循环变量
I
放入宏变量j
,或者如何直接使用它来创建适当命名的变量和滞后函数?您将宏和数据步骤语法错误地混合在一起
您需要一个宏循环(%DO
而不是DO
)来生成数据步代码(即lag1-lag50),宏循环需要在宏中
%MACRO LAGLOOP ;
data out ;
set in ;
%DO J = 1 %TO 50 ;
lag_&J = lag&J(x) ;
%END ;
run ;
%MEND ;
%LAGLOOP ;
%宏观滞后环;
数据输出;
产生
%DO J=1%至50;
lag_uj=lag&J(x);
%结束;
跑
%修补;
%拉格洛普;
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;
这是宏循环的一种更模块化的用法(并且更具可读性,假设您使用智能名称-以上都是可以的,如果您想非常清楚,您可以对名称做更多的操作,当然还可以添加注释)。如果您有SAS/ETS许可证,也可以查看proc EXPLAND。谢谢大家,我现在有不止一种方法来解决这个问题。这是一个完美的例子。好提示。我想我也会这么做,因为一个人通常需要在多个地方使用相同的解决方案@Joe您可能需要更改
lag.&iter=代码>到滞后&\u iter=代码>