SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 2944|回复: 19
打印 上一主题 下一主题

求助:如何高效的填补空缺值

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2008-3-5 14:44:51 | 只看该作者

求助:如何高效的填补空缺值

如果merge多个表,经常发生key值不匹配的情况,这样就会产生大量的空缺值。在modeling的时候又需要把这些空缺值填补完。如果变量很多,这项工作就会变得异常艰巨,所以我想请教有没有好办法,在merge的时候就填补完空缺值,而不必写大量的if x1=. then x1=0;这样的语句。
[code:1mr75ar9]data a;
infile datalines;
input x y1 y2;
datalines;
1 1 2
2 2 3
4 4 5
;
run;

data b;
infile datalines;
input x y3 y4;
datalines;
1 1 2
3 3 4
;
run;

data c;
merge a(in=ina) b(in=inb);
by x;
run;[/code:1mr75ar9]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2008-3-5 15:05:24 | 只看该作者

Re: 求助:如何高效的填补空缺值

data c;
merge a(in=ina) b(in=inb);
array a(*) y1 y2;
array b(*) y3 y4;
by x;
do i=1 to 2;if ^ina then a(i)=0;end;
do j=1 to 2;if ^inb then b(j)=0;end;
drop i j;
run;

不知这得效率如何..... (空缺都补为0的话)
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2008-3-5 15:08:46 | 只看该作者

Re: 求助:如何高效的填补空缺值

我想了一个,不算太好,所以先不贴。。。。。。。。。。。。
想好再说。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2008-3-5 15:11:19 | 只看该作者

to tianwild

算是好办法了,这样的确可以节约很多时间了,谢谢你!

最好是有高手知道我们都不知道的option,statement,function能简单的搞定的。如:z=nmiss(of y1-y2);
一下程序虽然完全不切题,完全没关系,但是想给大家一些发散的思维。
[code:zp1n2dwo]data survey;
   missing a r;
   input id answer;
   datalines;
001 2
002 R
003 1
004 A
005 2
;[/code:zp1n2dwo]
命不好,目前为止我还没有在SAS HELP找到这样的“神奇”语句能击中“要害”的,哈哈哈。所以想来与大家探讨。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2008-3-5 15:18:05 | 只看该作者

Re: 求助:如何高效的填补空缺值

添加[code:2ck9lfqn]options missing=0;[/code:2ck9lfqn]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2008-3-5 15:24:34 | 只看该作者

to waterlwh

“神奇”的option终于出现了,完全好使,谢谢啦!

不过需求再进一步:我想一部分变量的却是值设为0,另一部分设为-999。可能就要写macro来实现了,我自己再想下去好了。

anyway,非常感谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2008-3-5 15:31:25 | 只看该作者

Re: 求助:如何高效的填补空缺值

果然神奇的options,以前看的时候没在意有这样的妙用... <!-- s:shock: --><img src="{SMILIES_PATH}/icon_eek.gif" alt=":shock:" title="Shocked" /><!-- s:shock: -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2008-3-5 15:37:09 | 只看该作者

Re: 求助:如何高效的填补空缺值

报告:发现问题了!
[code:2edmqcd3]data c;
merge a(in=ina) b(in=inb);
by x;
if y4=&#46; then y4=-999;
run;

data d;
set c;
z=y1+y2+y3+y4;
run;[/code:2edmqcd3]
[quote:2edmqcd3]848  data d;
849  set c;
850  z=y1+y2+y3+y4;
851  run;

NOTE: Missing values were generated as a result of performing an operation on missing values.
      Each place is given by: (Number of times) at (Line):(Column).
      1 at 850:5   2 at 850:8
NOTE: There were 4 observations read from the data set WORK.C.
NOTE: The data set WORK.D has 4 observations and 6 variables.
NOTE: DATA statement used (Total process time):
      real time           0.00 seconds
      cpu time            0.00 seconds[/quote:2edmqcd3]
你会发现z的值好多都是缺失,证明option missing只是把显示改成了0,没有真正把值改成0。 <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2008-3-5 15:54:40 | 只看该作者

Re: 求助:如何高效的填补空缺值

<!-- s:shock: --><img src="{SMILIES_PATH}/icon_eek.gif" alt=":shock:" title="Shocked" /><!-- s:shock: --> 对的,写个判断是0 or 缺失的赋不同的值就可以知道了。翻了下书确实是这样....

看来得多多的实践才能理解其中的奥妙.....
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
10#
 楼主| 发表于 2008-3-5 16:35:25 | 只看该作者

Re: 求助:如何高效的填补空缺值

<!-- s:? --><img src="{SMILIES_PATH}/icon_confused.gif" alt=":?" title="Confused" /><!-- s:? --> 假的真不了呀!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-4 20:11 , Processed in 0.078242 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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