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;
Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.
Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.
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.