直接给代码吧:
data aaa;
input id visit$8. x;
cards;
1 5 1
1 6 2
1 8 3
1 14.01 3
1 14.02 3
2 5 1
2 6 2
2 19.01 2
3 5 2
3 6 3
3 14.02 3
;
run;
data aaa;set aaa;
c=length(visit);
run;
proc sort data = aaa;
by id c visit;
run;
proc sql;
create table dis_vname as
select distinct c,compress(visit) as vname from aaa;
quit;
proc sort data = dis_vname;
by c vname;
run;
data dis_vname;set dis_vname;
vname = compress(vname,'.');
format call $1000.;
call = "retain V"||compress(vname)||";if first.id then V"||compress(vname)||"=.;if compress(visit,'.')='"||compress(vname)||"' then V"||compress(vname)||"=x;";
call symput('c'||compress(_n_),call);
run;
proc sql noprint;
select count(*) into :nc from dis_vname
;quit;
%macro cc;
%do i = 1 %to &nc.;
&&c&i..;;
%end;
%mend;
data bbb;set aaa;
by id;
%cc;
if last.id;
drop c visit x;
run;