Hi, another (belated) idea though you end up with sorted names ...
data x; input (name1-name4) (:$2.); datalines; AA BB CC DD AA AA BB EE FF FF CC CC AA AA AA AA BB BB BB ZZ AA CC CC AA JJ KK KK KK ZZ YY ZZ YY QQ QQ EE FF ;
data y (drop=names); length names $30; set x; call sortc(of name1-name4); names = catx(' ',of name: ); howmany = (count(tranwrd(names,name1,''),name2) ne 0) + (count(tranwrd(names,name2,''),name3) ne 0) + (count(tranwrd(names,name3,''),name4) ne 0) + 1; run;
Or ...
data y (drop=j); set x; array name(4); call sortc(of name1-name4); howmany = 1; do j=1 to 3; howmany + ^^find(tranwrd(catx(' ',of name: ),name(j),''),name(j+1)); end; run;
(^^find ... changes result from location to 1 if found, 0 if not ... thanks to Howard Schreier)
DATA SET: y
name1 name2 name3 name4 howmany
AA BB CC DD 4
AA AA BB EE 3
CC CC FF FF 2
AA AA AA AA 1
BB BB BB ZZ 2
AA AA CC CC 2
JJ KK KK KK 2
YY YY ZZ ZZ 2
EE FF QQ QQ 3
... View more