data have;
input number;
cards;
12
10
8
6
4
2
run;
data want;
set have;
lag_d = lag(number) - number;
run;
when i run this code i am getting like this
Obs | number | lag_d |
1 | 12 | . |
2 | 10 | 2 |
3 | 8 | 2 |
4 | 6 | 2 |
5 | 4 | 2 |
6 | 2 | 2 |
but i need the ouput like this insted of staring . i need the valus from frist row
Obs | number | lag_d |
1 | 12 | 2 |
2 | 10 | 2 |
3 | 8 | 2 |
4 | 6 | 2 |
5 | 4 | 2 |
6 | 2 | 0 |
data have; input number; cards; 12 10 8 6 4 2 ; run; data want; merge have have(keep=number rename=(number=_n) firstobs=2); lag_d=number-_n; if missing(lag_d) then lag_d=0; drop _n; run;
What you want to do is to simulate a lead function. It can be done like this
data have;
input number;
cards;
12
10
8
6
4
2
run;
data have;
set have;
if eof=0 then
set have (firstobs=2 keep=number rename=(number=lead_number)) end=eof;
else lead_number=.;
lag_d = number - lead_number;
run;
Bear in mind though, that the last value of your lag_d variable will be missing with this solution, which I think is more approprate than it being zero, since you do not know the next value of number. This can be corrected fairly easily though 🙂
data have; input number; cards; 12 10 8 6 4 2 ; run; data want; merge have have(keep=number rename=(number=_n) firstobs=2); lag_d=number-_n; if missing(lag_d) then lag_d=0; drop _n; run;
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.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.