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

Dynamic n in function LAG<n> (variable) SAS

你知道如何在函数 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;

提前致谢! 维奥拉

这是你想要做的吗?

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. 位确保由 proc sql 生成的宏变量不包含任何会弄乱后续数据步骤代码的前导或尾随空格。

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

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

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