You probably need a macro to loop over the dataset until no more records are removed. Something like this should work. But it does not look like it yields a good solution as obs 3 is just the same as obs 1 the final dataset. data have ; input year (name1-name4) ($); cards; 2011 Abe Sue Bob Joy 2012 Abe Bob Sue Joy 2013 Sue Joy Bob Abe 2014 Bob Abe Joy Sue 2015 Abe Sue Bob Joy run; %macro winnow(in=,out=); %local ndel; data &out; set ∈ run; %do %until(&ndel=0); data &out ; if eof then call symputx('ndel',ndel); set &out end=eof; array name (4) ; do i=1 to dim(name) ; if name(i) = lag(name(i)) then del=1; end; if del then do; ndel+1; delete; end; drop i del ndel; run; %end; %mend winnow; %winnow(in=have,out=want); proc print data=want width=min; run; Obs year name1 name2 name3 name4 1 2011 Abe Sue Bob Joy 2 2014 Bob Abe Joy Sue 3 2015 Abe Sue Bob Joy
... View more