BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
cmemtsa
Quartz | Level 8
data T;
input ID A;
Datalines;
1310 CA
1310 AB
1310 CD 1320 AB 1320 CA ;

Hello,

how can I extract only the first encountered records per ID? i.e.

1310 CA

1320 AB

 

Thanks

1 ACCEPTED SOLUTION

Accepted Solutions
ballardw
Super User

If your data is sorted then

 

data want;
   set have;
   by id;
   if first.id;
run;

When you use a By statement, which requires the data to be sorted by the variables on the statement and if you mix ascending and descending order you need to provide the same information as Proc Sort would use to sort the values, the data step creates automatic variables to identify the first and last record of each by group. You access the values using First. or Last. (dot immediately after the word first or last and before the variable name). These variables have numeric values of 1 (true) and 0 (false) and so can be used in If statements. The automatic variables are not written to the output data.

A simple: If <condition>; is known as a "subsetting if" and only records that have a true value for the condition are kept.

 

BTW your data step fails to run. You did not tell the input that the values of the variable A are character.

View solution in original post

2 REPLIES 2
ballardw
Super User

If your data is sorted then

 

data want;
   set have;
   by id;
   if first.id;
run;

When you use a By statement, which requires the data to be sorted by the variables on the statement and if you mix ascending and descending order you need to provide the same information as Proc Sort would use to sort the values, the data step creates automatic variables to identify the first and last record of each by group. You access the values using First. or Last. (dot immediately after the word first or last and before the variable name). These variables have numeric values of 1 (true) and 0 (false) and so can be used in If statements. The automatic variables are not written to the output data.

A simple: If <condition>; is known as a "subsetting if" and only records that have a true value for the condition are kept.

 

BTW your data step fails to run. You did not tell the input that the values of the variable A are character.

cmemtsa
Quartz | Level 8
Thank you!

Ready to join fellow brilliant minds for the SAS Hackathon?

Build your skills. Make connections. Enjoy creative freedom. Maybe change the world. Registration is now open through August 30th. Visit the SAS Hackathon homepage.

Register today!
Mastering the WHERE Clause in PROC SQL

SAS' Charu Shankar shares her PROC SQL expertise by showing you how to master the WHERE clause using real winter weather data.

Find more tutorials on the SAS Users YouTube channel.

Discussion stats
  • 2 replies
  • 468 views
  • 1 like
  • 2 in conversation