Here is a small macro (using proc transpose)....not exactly the same, but converts to one record per ID you can add more variable to the "list=", and specify their prefixes in the "Prefixlist=" data have; input ID $ @6 Date yymmdd10. @26 code @40 code_descrip $20.; format Date yymmdd10.; cards; 101 2011-11-16 250 Diabetes 101 2012-12-18 400 hypertension 101 2012-12-18 401 nausea 101 2012-12-18 402 bleeding run; %macro WideTranspose (data=, out= ,by=, id=,where= ,list=, Prefixlist=); %let n=1; %do %until (&var=); %let var =%scan (&list,&n); %let prefix= %scan (&Prefixlist,&n); %put &var; proc sort data=&data; by &by; run; proc transpose data=&data out=out&n (drop= _:) prefix=&prefix LET; by &by; var &var; %if %length (&id) %then %do; id &id; %end; where &where; run; %let n=%eval(&n+1); %let var =%scan (&list,&n); %end; %let dn= %eval(&n-1); %put &dn; data &out; merge out1-out&dn; by &by; run; %mend; %WideTranspose (data=have, out=want , by=id, id= , where= , list=date code code_descrip, Prefixlist=date code code_descrip);
... View more