data have;
input ID visit $ 15. weight;
cards;
1001 weight_v1 56.5
1001 weight_v2 67.5
1001 weight_v3 62.8
1002 weight_v1 78.9
1002 weight_v2 75.3
1002 weight_v3 70.2
1003 weight_v1 67.7
1003 weight_v2 64.8
1003 weight_v3 63.9
;
run;
data want;
set have;
by id notsorted;
array ar{*} weight_v1 weight_v2 weight_v3;
retain weight_v:;
visit_ = input(substr(visit,9,1),best.);
if first.id then call missing (of ar{*});
do visit_ = 1 to dim(ar);
ar{visit_}=weight;
end;
if last.id then output;
drop visit weight visit_ ;
run;
... View more