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-2024.png

Don't miss out on SAS Innovate - Register now for the FREE Livestream!

Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.

 

Register now!

Multiple Linear Regression in SAS

Learn how to run multiple linear regression models with and without interactions, presented by SAS user Alex Chaplin.

Find more tutorials on the SAS Users YouTube channel.

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