This is very close. You don't need to the do loop. The do loop is telling SAS to create the 10 variables for EACH record, which I don't believe you want. I made up the following data: Your modified code worked fine for me on that data: data want (drop=reason onset end status count);
set want1;
by Name;
retain reas1 reas2 reas3 reas4 reas5 reas6 reas7 reas8 reas9 reas10
on1 on2 on3 on4 on5 on6 on7 on8 on9 on10
endd1 endd2 endd3 endd4 endd5 endd6 endd7 endd8 endd9 endd10
stat1 stat2 stat3 stat4 stat5 stat6 stat7 stat8 stat9 stat10;
array reas(10) reas1 reas2 reas3 reas4 reas5 reas6 reas7 reas8 reas9 reas10;
array on(10) on1 on2 on3 on4 on5 on6 on7 on8 on9 on10;
array endd(10) endd1 endd2 endd3 endd4 endd5 endd6 endd7 endd8 endd9 endd10;
array stat(10) stat1 stat2 stat3 stat4 stat5 stat6 stat7 stat8 stat9 stat10;
if first.name then count=1;
else count+1;
reas(count)=Reason;
on(count)=Onset;
endd(count)=End;
stat(count)=Status;
if last.name;
run; Also, if you want the order to be reason1 onset1 end1 status1 count1, etc... then you have to specify that order in the retain statement.
... View more