data have;
length facility $20.;
infile cards dlm=',' dsd;
input ID facility;
cards;
1,Swimming Pool
1,SPA
2,Gym room
2,restaurant
2,bar
3,Room
;
run;
proc sql noprint;
SELECT max(nfac) INTO :nfac TRIMMED
FROM (
SELECT count(facility) AS nfac
FROM have
GROUP BY ID
)
;
quit;
data want;
set have;
by ID;
retain facility1-facility&nfac.;
array fac(&nfac.) $20. facility1-facility&nfac.;
if first.ID then do;
call missing(of fac(*));
i=1;
end;
else i+1;
fac(i)=facility;
if last.ID;
drop i facility;
run;
... View more