SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 735|回复: 3
打印 上一主题 下一主题

如何更新数据集,谢谢!

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2011-8-3 05:45:26 | 只看该作者

如何更新数据集,谢谢!

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中相应的变量值*/
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2011-8-3 10:45:48 | 只看该作者

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]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2011-8-3 12:07:36 | 只看该作者

Re: 如何更新数据集,谢谢!

数据集中的变量很多!如何能通用啊!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2011-8-4 09:52:41 | 只看该作者

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]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-6-9 23:54 , Processed in 0.087653 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表