SAS Programming

DATA Step, Macro, Functions and more
BookmarkSubscribeRSS Feed
lca
Calcite | Level 5 lca
Calcite | Level 5

Hello!

SAS newbie here 🙂

I have table similar to this:

ID
Version
Value
100010
100111
200020
200121
200222
200321
200420
300040
300141
300243

I want to extract data and make a new table with only unique IDs with the highest version and corresponding value.

Like this:

ID
Version
Value
100111
200420
300243

This is may be easy, but I'm new to SAS 🙂

Any suggestions?


4 REPLIES 4
art297
Opal | Level 21

There are a number of ways.  Here is one using proc sort.

proc sort data=have;

  by id descending version;

run;

proc sort data=have out=want nodupkey;

  by id;

run;

lca
Calcite | Level 5 lca
Calcite | Level 5

Thank you, it worked Smiley Happy

art297
Opal | Level 21

You could also do it using proc sql:

proc sql noprint;

  create table want as

     select *

       from have

         group by id

           having version eq max(version)

  ;

quit;

DLing
Obsidian | Level 7

The data set also appears to be sorted by ID and Version, in which case, you can use:

proc sort data=have;   *--- only needed if not already sorted by ID and Version;

   by id version;

run;

data want;

   set have;

   by id;

   if last.id;   *--- highest version for each id due to sorting;

run;

Use which ever method you find more natural and intuitive to you.  Art's methods all work.

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
  • 4 replies
  • 1158 views
  • 0 likes
  • 3 in conversation