Dear All
My data is as follows
IDA IDB Cat VarA
A 1 1 7
A 1 1 9
B 1 1 7
B 1 1 10
B 2 1 11
A 1 2 12
A 1 2 14
A 2 2 16
C 1 3 12
C1 1 3 14
I want the following table as output removing the duplicates and just keeping the first observation for IDA IDB for each CAT
IDA IDB Cat VarA
A 1 1 7
B 1 1 7
B 2 1 11
A 1 2 12
A 2 2 16
C 1 3 12
The code I wrote was
proc sort data = have; by IDA IDB Cat ; run;
data want ; set have
by IDA IDB Cat ;
if first.Cat then output ;
run;
Am I making a mistake somewhere?
run;
next time please post the data as datalines.
Sincere apologies
Row IDA IDB Cat VarA
1 A 1 1 7
2 A 1 1 9
3 B 1 1 7
4 B 1 1 10
5 B 2 1 11
6 A 1 2 12
7 A 1 2 14
8 A 2 2 16
9 C 1 3 12
10 C 1 3 14
Row IDA IDB Cat VarA
1 A 1 1 7
3 B 1 1 7
5 B 2 1 11
6 A 1 2 12
8 A 2 2 16
9 C 1 3 12
Hey I meant to post it as a data step. You can see an example in my other reply to you. Also, you can post code by clicking the running man icon.
I don't see C1 in your desired output. Is there a reason that was excluded?
data have;
input IDA $ IDB $ Cat $ VarA;
datalines;
A 1 1 7
A 1 1 9
B 1 1 7
B 1 1 10
B 2 1 11
A 1 2 12
A 1 2 14
A 2 2 16
C 1 3 12
C1 1 3 14
;
proc print;
run;
proc sort data=have out=want nodupkey;
by IDA IDB Cat;
run;
You can try the nodupkey option in proc sort.
The SET statement does not have a terminating semicolon, so you will have ERRORs there.
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.