标题: 如何更新数据集,谢谢! [打印本页] 作者: shiyiming 时间: 2011-8-3 05:45 标题: 如何更新数据集,谢谢! data aaa;
infile cards missover;
input no var$ value$10.;
cards;
1 age 30
2 time 2009/10/03
3 x1 .
4 x2
5 x3 正常
;
run;
data bbb;
input no age time x1 x2$ x3$;
format time yymmdd6.;
cards;
1 29 510317 1 y 正常
2 30 681224 2 n 异常
3 26 651128 3 y 异常
4 25 651128 4 n 异常
5 24 651128 5 y 异常
;
run;
/*根据数据集aaa更新数据集bbb中相应的变量值*/作者: shiyiming 时间: 2011-8-3 10:45 标题: Re: 如何更新数据集,谢谢! [code:3ps8y79l]data bbb(drop=i var value);
set aaa;set bbb;
array _num_{1:3} age time x1;
array _char_{4:5} $ x2 x3;
do i=1 to 5;
if var=choosec(i,'age','time','x1','x2','x3') then do;
if i le 3 then do;
if var eq 'time' then _num_(i)=input(value,yymmdd10.);
else _num_(i)=value;
end;
else _char_(i)=value;
leave;
end;
end;
format time yymmdd6.;
run;[/code:3ps8y79l]作者: shiyiming 时间: 2011-8-3 12:07 标题: Re: 如何更新数据集,谢谢! 数据集中的变量很多!如何能通用啊!作者: shiyiming 时间: 2011-8-4 09:52 标题: Re: 如何更新数据集,谢谢! 过程比较繁杂,将就下吧...
[code:14f79ceu]proc sql noprint;
create table test as
select name,type
from dictionary.columns
where libname='WORK' and memname='BBB';
quit;
proc sql noprint;
select name
into:num_list separated by ' '
from test
where name ne 'no' and type eq 'num';
select name
into:char_list separated by ' '
from test
where type eq 'char';
select count(name)-1
into:nn
from test
where type eq 'num';
select count(name)
into:nc
from test
where type eq 'num';
select count(name)-1
into:nv
from test;
quit;
%put &num_list. &char_list. &nn. &nc. &nv.;
proc sort data=test;
by descending type;
run;
data _null_;
set test(firstobs=2);
array v{&nv};
call symputx(vname(v[_n_]), name);
run;
data bb(keep=no age time x1-x3);
set aaa;set bbb ;
array v{&nv};
array _num_{1:&nn.} &num_list;
array _char_{&nc.:&nv.} $ &char_list;
do i=1 to &nv.;
if var=symget(vname(v[i])) then do;
if i le &nn. then do;
if var eq 'time' then _num_(i)=input(value,yymmdd10.);
else _num_(i)=value;
end;
else _char_(i)=value;
leave;
end;
end;
format time yymmdd6.;
run;
[/code:14f79ceu]