%macro suppjoin(lib=sdtm, ds=, qnams=, debug=N); %if &qnams eq %then %do; proc sql noprint; select distinct(qnam) into: qnam separated by ' ' from &lib..supp&ds; quit; %end; proc sort data=&lib..supp&ds. out=_temp_supp&ds.; by usubjid idvarval; run; proc sort data = &lib..&ds. out=_temp_&ds.; by usubjid &ds.seq; run; proc transpose data=_temp_supp&ds. out=_t_supp&ds.; by usubjid idvarval; id qnam; idl qlabel; var qval; run; data _t_supp&ds. (drop= _: idvarval ); set _t_supp&ds.; &ds.seq=input(compress(idvarval),8.); run; proc sort data=_t_supp&ds.; by usubjid &ds.seq; run; data &ds.; merge _temp_&ds. _t_supp&ds.; by usubjid &ds.seq; run; %if &debug=N %then %do; proc datasets nolist; delete _temp_: run; quit; %end; %mend suppjoin; %suppjoin(lib=sdtm, ds=ae, qnams=, debug=N);