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
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.
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;
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;
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!
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.