Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
函数滞后中的动态n<;n>;(可变)SAS_Sas_Sas Macro - Fatal编程技术网

函数滞后中的动态n<;n>;(可变)SAS

函数滞后中的动态n<;n>;(可变)SAS,sas,sas-macro,Sas,Sas Macro,您知道如何在函数LAGn(变量)中使用n,在我的例子中,该函数引用程序->max中的另一个宏变量 data example1; input value; datalines; 1.0

您知道如何在函数LAGn(变量)中使用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执行。因此,在数据步中间放置>%让语句会混淆人类程序员。

你是天才!这正是我问题的解决办法。多谢各位<代码>重置noprint;将max(cel(abs(value)))选择到:n trimmed可能是更安全的宏变量赋值
n
您的程序没有名为
max
的宏变量。