%macro ck_dups(din=, byvars=usubjid, keepvars=, whrstr=, dout=ck_dups); %let lastvar=%scan(&byvars, -1); %let din0=%scan(&din, -1); *** sort data *****; proc sort data=&din out=&din0; by &byvars; &whrstr; run; ***** find dups visits *****; data &dout; set &din0; by &byvars; if first.&lastvar and last.&lastvar then delete; %if &keepvars ne %then %do; keep &keepvars; %end; run; %mend ck_dups; %ck_dups(din=sdtm.lb, byvars=%str(usubjid lbtestcd lbdtc));