函数LAG <n>(变量)SAS中的动态n

时间:2018-11-28 08:50:20

标签: sas sas-macro

您是否知道如何在函数LAGn(variable)中使用n来引用程序中的另一个宏变量->在我的情况下为max?

data example1;                                                 
input value;                                                  
datalines;                                                    
1.0                                                          
3.0                                                            
1.0                                                          
1.0                                                          
4.0                                                           
1.0                                                          
1.0                                                          
2.0                                                          
4.0                                                            
2.0                                                          
;       
proc means data=example1 max;
output out=example11 max=max;
run; 
data example1;  
%let n = max;  
lagval=lag&n.(value);                                            
run;                                                          

proc print data=example1;                                                   
run;

先谢谢您! 维奥拉

2 个答案:

答案 0 :(得分:2)

这是您要做什么吗?

'

data example1; input value; datalines; 1.0 3.0 1.0 1.0 4.0 1.0 1.0 2.0 4.0 2.0 ; proc sql; select max(value) format = 1. into :n from example1; quit; data example1; set example1; lagval=lag&n(value); run; 位确保由format = 1.生成的宏变量不包含任何会混淆后续数据步骤代码的前导或尾随空格。

答案 1 :(得分:0)

使用宏变量来生成LAGn()函数调用的N部分很容易。

%let n=4 ;
data want;
  set have ;
  newvar = lag&n(oldvar);
run;

请记住,宏代码由宏预处理器评估,然后生成的代码由SAS执行。因此,将%LET语句放在数据步骤的中间只会使程序员感到困惑。