SAS Programming

DATA Step, Macro, Functions and more
BookmarkSubscribeRSS Feed
DanD
Calcite | Level 5
I want to select one row for each id based on the min(date). My data looks like this:

id code date
1 38 200912
1 AG 201010
2 17 200911
2 09 200910
2 36 201010
3 12 201009

The result set should look like this:
1 38 200912
2 09 200910
3 12 201009

How do I do this?

Thanks,

Dan
5 REPLIES 5
Reeza
Super User
Two step proc sort.

proc sort data=have;
by id descending date;
run;

proc sort data=have nodupkey out=want dupout=duplicates;
by id;
run;

OR the second step can be the one below.

data first;
set have;
by id;
if first.id then output;
run;
DanD
Calcite | Level 5
Those worked great. Thanks Reeza.
DBailey
Lapis Lazuli | Level 10
one step, if you don't mind potential duplicates:

proc sql;
select
t1.id,
t1.code,
t1.date
from
work.tabA t1
where
t1.date=(select min(date) from work.tabA where id=t1.id);
quit;
DanD
Calcite | Level 5
I tried it but you were right, it did have a few dupes. I need to have only one row per id. Reeza's code in an above message worked for what I need. Thanks for replying.
Ksharp
Super User
[pre]
data temp;
input id code $ date ;
cards;
1 38 200912
1 AG 201010
2 17 200911
2 09 200910
2 36 201010
3 12 201009
;
run;
proc sql;
select *
from temp
group by id
haveing date eq min(date)
;
quit;
[/pre]




Ksharp

sas-innovate-wordmark-2025-midnight.png

Register Today!

Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.


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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 5 replies
  • 9313 views
  • 0 likes
  • 4 in conversation