I am novice, unlike the greats PG, Xia and Haikuo, hence the long and ugly way, for learning purpse it helps: data have;/*Raw data copied from Haikuo*/ input subjid : $20. number $ cat & $40. visitnum; cards; 100010001 T02 TARGET LESIONS 0 100010001 T01 TARGET LESIONS 0 100010001 T03 TARGET LESIONS 0 100010001 T02 TARGET LESIONS 1 100010001 T03 TARGET LESIONS 1 100010001 T01 TARGET LESIONS 1 100010001 T02 TARGET LESIONS 2 100010001 T01 TARGET LESIONS 2 100010001 T03 TARGET LESIONS 2 100010002 T02 TARGET LESIONS 0 100010002 T01 TARGET LESIONS 0 100010002 T02 TARGET LESIONS 1 100010002 T01 TARGET LESIONS 1 100010002 T02 TARGET LESIONS 2 100010002 T01 TARGET LESIONS 2 100030002 T03 TARGET LESIONS 0 100030002 T04 TARGET LESIONS 0 100030002 T02 TARGET LESIONS 0 100030002 T01 TARGET LESIONS 0 100030002 T01 TARGET LESIONS 1 100030002 T04 TARGET LESIONS 1 100030002 T03 TARGET LESIONS 1 100030002 T02 TARGET LESIONS 1 160020001 T02 TARGET LESIONS 0 160020001 T01 TARGET LESIONS 0 160020001 T02 TARGET LESIONS 1 ; run; data want; set have; by subjid visitnum notsorted; array n(30) _temporary_; *array subscript is arbitrary; if first.subjid then call missing(of n{*}); if first.visitnum then count=0; count+1; if last.visitnum then n(_n_)=count; if last.subjid then do; if max(of n ) ne count then discrepancy="yes"; else discrepancy="no"; end; if discrepancy="yes" then output; drop count; run; proc sort data= have out=have1; by subjid; run; data final; merge want have1; by subjid; if discrepancy="yes" then output; drop discrepancy; run; Regards, Naveen Srinivasan L&T Infotech
... View more