Wednesday, August 30, 2006

Sas array demi

data a;
input id name $;
cards;
10 -11
10 222
10 -33
23 333
23 -33
76 -11
76 222
76 -33
;
run;
data b;
input names $;
cards;
-11
-33
222
333
999
888
555
666
777
;
run;
data bb; length nam_nam $200;set b end=eof;
if _n_=1 then nam_nam=' ';
retain nam_nam;
nam_nam=trim(compress(nam_nam||"','"||names));
if eof then do;
nam_nam=compress(substr(nam_nam,3)||"'");
output;
end;
call symput('name_macro',nam_nam);
run;
proc sort data=a; by id name; run;
options symbolgen mprint;
data b;
set a; by id;
array nam [9] $ _temporary_ (&name_macro);
array vars v1-v9;
retain v1-v9;
do jj=1 to dim(vars);
vars[jj]=.;
end;
do j=1 to dim(vars);
if name=nam[j] then vars[j]=1;
end;
if last.id then output;
drop jj j;
run;

No comments: