Do you care if the new variables are grouped by the original NAME instead of by the original ROW?
If not then just use PROC SUMMARY to make the dataset. You will need to set an upper bound on the number of rows per NAME you want to transpose. In your example you used 10 as this limit. (If you want you could find the number in advance and put it into a macro variable.)
proc summary data=HAVE ;
by NAME ;
output out=want idgroup (out[10] (Reason Onset End Status)=);
run;
Since you didn't provide any data let's make our own example to demonstrate.
data have;
input id x y ;
cards;
1 1 2
1 2 3
1 4 5
2 6 7
2 8 9
;
proc summary data=have;
by id;
output out=want idgroup (out[4] (x y)=);
run;
Results:
... View more