BookmarkSubscribeRSS Feed
bssturgi
Calcite | Level 5

I have panel data, and I am trying to create lags. The code below seems to be generating the desired results for the first lag of the variable of interest.

 

proc sort data=Pooled_Panel;
by Country Year;
run;

data Pooled_Panel_lags;
set Pooled_Panel;
by Country Year;
Lag_EFWS=Lag(EFWS);
If First.Country then do;
   Lag_EFWS=.;
end;
run;

My question is this.  How do I do this for the second lag?  I know to use Lag2(variable), but what type of if-then statement do I need here?  I don't want the second lag to be the value two rows before if that value corresponds to another country.  I'm using SAS 9.4.

3 REPLIES 3
Reeza
Super User

Do you have SAS/ETS? If so, you can do this a bit more easily with the convert statement. 

 

If you don't, you're stuck with a counter. Create a counter variable using RETAIN and then delete any less than what you need.

 

 

 

data Pooled_Panel_lags;
set Pooled_Panel;
by Country Year;

Lag_EFWS  = Lag(EFWS);
Lag_EFWS2 = Lag2(EFWS);
 
If First.Country then counter=0;

counter+1;

if counter <= 1 then call missing(lag_efws, lag_efws2);
if counter <= 2 then call missing(lag_efws2);



run;

 

I can't test it, but this may work as well, make sure to only Keep what you need in each data set.

 

 

data want;
merge pooled_panel
           pooled_panel (firstobs=2 rename = (efws = lag_efws) keep=(PUT VARIABLE LIST HERE))
           pooled_panel (firstobs=3) rename = (efws = lag_efws2) keep=(PUT VARIABLE LIST HERE));

by country;

run;

 

bssturgi
Calcite | Level 5

Thank you!  The code you provided with the counter has done the trick.

 

I don't have SAS/ETS, but I think one of my colleagues may have at, and I may get it in the future.  Could you tell me how I would do this with the convert statement?

sas-innovate-2026-white.png



April 27 – 30 | Gaylord Texan | Grapevine, Texas

Registration is open

Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!

Register now

Discussion stats
  • 3 replies
  • 1848 views
  • 1 like
  • 2 in conversation