Динамический n в функции LAG <n>(переменная) SAS - PullRequest
0 голосов
/ 28 ноября 2018

знаете ли вы, как использовать n в функции LAGn (переменная), которая ссылается на другую макропеременную в программе -> 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;

Заранее спасибо!Wiola

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Легко использовать макропеременную для генерирования части N вызова функции LAGn ().

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

Помните, что код макроса оценивается препроцессором макроса, а затем сгенерированный кодвыполнено САС.Поэтому размещение операторов %LET в середине шага данных просто запутает человека-программиста.

0 голосов
/ 28 ноября 2018

Это то, что вы пытаетесь сделать?

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, не содержит начальных или конечных пробелов, которые могли бы испортитькод последующего шага данных.

...