DATA Step, Macro, Functions and more

Lag Function behavior problem

Reply
Contributor
Posts: 45

Lag Function behavior problem

Hello,

 

I am using the lag function which works for parts of my data set, while it doesn't in other parts (?) I am using this very simple data step below: Does anybody know what's wrong with this code?

 

Thank you!

 

data adjustment3;
set adjustment3;
if count_cluster=lag1(count_cluster) then Max_Salary_previous_grade=lag1(max_salary); else Max_Salary_previous_grade=0;

run;

 

    TABLE GET  
count_cluster Max_salary Max_Salary_previous_grade  
1            56,768                                                      -    
1            70,741                                            56,768 ok!
2            49,957                                                      -    
3            50,000                                                      -    
4            34,360                                                      -    
4            49,790                                            70,741 Error!
4            53,220                                            49,790 ok!
       
       
    TABLE WANT  
count_cluster Max_salary Max_Salary_previous_grade  
1            56,768                                                      -    
1            70,741                                            56,768  
2            49,957                                                      -    
3            50,000                                                      -    
4            34,360                                                      -    
4            49,790                                            34,360  
4            53,220                                            49,790  

 

 

 

SAS Super FREQ
Posts: 708

Re: Lag Function behavior problem

[ Edited ]

You can not execute the LAG function conditionally. The LAG function has to be executed for every observation.

 

See the sample below with the modfied logic. You can make use of BY group processing and the FIRST. functionality.

 

data have;
  infile cards dlm=",";
  input
    count_cluster
    Max_salary
  ;
cards;
1, 56768
1,70741
2,49957
3,50000
4,34360
4,49790
4,53220
;

data want;
  set have;
  by count_cluster;
    _prev_salary = lag1(max_salary);
  if first.count_cluster = 0 then do;
    Max_Salary_previous_grade = _prev_salary;
  end;
  drop _prev_salary;
run;

Bruno

Ask a Question
Discussion stats
  • 1 reply
  • 127 views
  • 0 likes
  • 2 in conversation