It looks to me like the proc transpose produces what you want:
data have;
infile datalines missover;
input id type$;
datalines;
1 A
1 AA
2 A
2 AAA
2 AAAAAAA
3 AAAAAAAAAA
4 AA
4 A
5 A
5 AAAAAAA
5 AAAA
run;
proc transpose data=have out=want (drop=_name_) prefix=type_ ;
by id;
var type;
run;
proc print;run;
The result is:
Obs id type_1 type_2 type_3
1 1 A AA
2 2 A AAA AAAAAAA
3 3 AAAAAAAA
4 4 AA A
5 5 A AAAAAAA AAAA
... View more