BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
eemrun
Obsidian | Level 7

I have a table where I need a new variable (P_Current) that takes value of the previous value of variable (Current) . The following highlights what I am looking for:

 

IDCurrentP_Current
111
201
210
301
400
510
611

 

I was trying the following but thats probably not correct

 

data test2;
set test1;
by ID;
P_Current = lag(Current);
if first.ID then P_Current = Current;
run;

 

1 ACCEPTED SOLUTION

Accepted Solutions
ChrisNZ
Tourmaline | Level 20

Your output seems to macth this code:

data test2;
set test1;
P_Current = lag(Current);
if _N_=1 then P_Current = Current;
run;

View solution in original post

4 REPLIES 4
ChrisNZ
Tourmaline | Level 20

Your output seems to macth this code:

data test2;
set test1;
P_Current = lag(Current);
if _N_=1 then P_Current = Current;
run;
eemrun
Obsidian | Level 7
Thanks Chris. However, that code does not seem to be working. I have slightly edited the original post table. Ideally I am looking to populate the P_Current field with the last Current value (i.e. value from the previous row). With the code you suggested, the P_Current is populated with all 1s. Any idea where I might be going wrong?
PGStats
Opal | Level 21

@ChrisNZ's code is working:

 

data test1;
input ID Current;
datalines;
1 1
2 0
2 1
3 0
4 0
5 1
6 1
;

data test2;
set test1;
P_Current = lag(Current);
if _N_=1 then P_Current = Current;
run;

proc print data=test2 noobs; run; 
                            ID    Current    P_Current

                              1       1           1
                              2       0           1
                              2       1           0
                              3       0           1
                              4       0           0
                              5       1           0
                              6       1           1

Please post the code you tried.

 

PG
eemrun
Obsidian | Level 7
my apologies! i got the code wrong. chris's code is indeed correct.

sas-innovate-2024.png

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.

 

Register now!

How to Concatenate Values

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.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 4 replies
  • 52411 views
  • 2 likes
  • 3 in conversation