BookmarkSubscribeRSS Feed
apple
Calcite | Level 5

Each unique ID have many different rows of  addresses, I want a program to select for each unqiue ID any 3 rows of addressses. 

 

Thank you.

 

Example of dataset:

 

ID  Address

1    A

1    B

1    C

2    HH

2    KK

2    NN

2    MM

 

  

3 REPLIES 3
LinusH
Tourmaline | Level 20

If the data is sorted as per your example, use data step with BY ID, and use a counter that is re-initiated for each first.ID.

Use explicit output when the counter is <= 3.

Data never sleeps
RW9
Diamond | Level 26 RW9
Diamond | Level 26

Just a slight alteration of @LinusH answer uses lag to decide if to output or not (saves a variable and line of code):

data have;
  input id  address $;
datalines;
1    A
1    B
1    C
2    HH
2    KK
2    NN
2    MM
;
run;
data want;
  set have;
  by id;
  if first.id or lag(first.id) or lag2(first.id) then output;
run;
Ksharp
Super User
data have;
  input id  address $;
datalines;
1    A
1    B
1    C
2    HH
2    KK
2    NN
2    MM
;
run;

proc surveyselect data=have out=want sampsize=3;
strata id;
run;

hackathon24-white-horiz.png

2025 SAS Hackathon: There is still time!

Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!

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