Data b;
input cc swipe;
cards;
1 200
1 300
1 200
1 900
2 1300
2 1400
2 1500
;
run;
proc sort data=b;
by cc;
run;
data last_second;
set b;
by cc;
last_second_value = lag(swipe);
if last.cc then do;
output;
end;
drop swipe;
run;
How to get last second values using PROC SQL Method
output
cc swipe
1 200
2 1400
SQL does not have a concept of sequence, it works with sets. Stay with the DATA step, e.g.
data last_second;
do until (last.cc);
set b;
by cc;
if not last.cc then last_second_value = swipe;
end;
drop swipe;
run;
Your code can be simplified by using a Subsetting IF:
data last_second;
set b;
by cc;
last_second_value = lag(swipe);
if last.cc and not first.cc;
drop swipe;
run;
The expanded condition takes care of cases where there's only one observation for a cc group.
SQL does not have a concept of sequence, it works with sets. Stay with the DATA step, e.g.
data last_second;
do until (last.cc);
set b;
by cc;
if not last.cc then last_second_value = swipe;
end;
drop swipe;
run;
Your code can be simplified by using a Subsetting IF:
data last_second;
set b;
by cc;
last_second_value = lag(swipe);
if last.cc and not first.cc;
drop swipe;
run;
The expanded condition takes care of cases where there's only one observation for a cc group.
Catch the best of SAS Innovate 2025 — anytime, anywhere. Stream powerful keynotes, real-world demos, and game-changing insights from the world’s leading data and AI minds.
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.
Ready to level-up your skills? Choose your own adventure.