SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

12
返回列表 发新帖
楼主: shiyiming
打印 上一主题 下一主题

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

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
11#
 楼主| 发表于 2008-3-6 11:08:36 | 只看该作者

to waterlwh

你这句话太有才了,赞一个!

这样看来,我就先采用tianwild的方法,用数组做吧。

还是期待更好的方法。 <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
12#
 楼主| 发表于 2008-3-6 15:04:33 | 只看该作者

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

Fancy的options我从来都不知道。
我的办法是要有两个缺失值的数据集。目标数据集merge后再与缺失值的数据集merge两下。注意排序。
[code:11t4iodf]data left;
  input id a$ b ;
  cards;
1 A 2
4 X 3
;
run;

data defaultL;
  A='@';
  b=0;
  Lflg=1;
run;

data right;
  input id c d;
  cards;
1 4 7
2 6 9
;
run;

data defaultR;
  C=0;
  d=99;
  Rflg=1;
run;

data big;
  merge left(in=inL) right(in=inR);
  by id;
  Lflg=not inL;
  Rflg=not InR;
run;

proc sort data=big;
  by Lflg;
run;

data final;
  merge   big defaultL;
  by Lflg;
run;

proc sort data=final;
  by Rflg;
run;

data final(drop=lflg rflg);
  merge   final defaultR;
  by Rflg;
run;[/code:11t4iodf]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
13#
 楼主| 发表于 2008-3-6 15:37:50 | 只看该作者

to ahuige

为解决大量(几百个)变量的补缺,这的确是个好办法。需要补缺的越多,这段程序的优势就越明显。谢谢你!

PS,我就是我目前使用的逻辑和方法,不谋而合。 <!-- s:lol: --><img src="{SMILIES_PATH}/icon_lol.gif" alt=":lol:" title="Laughing" /><!-- s:lol: -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
14#
 楼主| 发表于 2008-3-6 22:24:12 | 只看该作者

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

唉,跟你们讨论每次都得动点儿脑子,想偷懒都不行。。。   <!-- s:? --><img src="{SMILIES_PATH}/icon_confused.gif" alt=":?" title="Confused" /><!-- s:? -->  
[code:195a4rtm]PROC STDIZE DATA=c REPONLY MISSING=0 OUT=c;
  VAR _numeric_;
RUN;[/code:195a4rtm]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

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

to superkuhasu

太牛X了!太感谢你了!

这次我真是赚了,一个小问题打开了一片新空间。
对于我个人来说proc stdize可是white space,越来越感到SAS真是博大精深啊。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
16#
 楼主| 发表于 2008-3-7 11:19:51 | 只看该作者

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

<!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
17#
 楼主| 发表于 2008-3-7 11:26:21 | 只看该作者

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

搜索 &quot;sas-l&quot; missing value to zero ,以上的几种方法除了ahuige的都提到了,我想请教一下,这几种方法,到底那种效率比较高呢?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
18#
 楼主| 发表于 2008-3-7 12:58:54 | 只看该作者

to waterlwh

自己去试!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
19#
 楼主| 发表于 2008-3-20 10:39:59 | 只看该作者

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

可以使用SAS/IML里的LOC函数
用LOC返还满足条件的元素在矩阵中的index,然后再把对应的元素设成0

[code:2ifhcb2d]proc iml;
use c;
read all into x&#91;colname=cols&#93;;
x&#91;LOC(x&lt;0)&#93;=0;
create d from x&#91;colname=cols&#93;;
append from x;
quit;[/code:2ifhcb2d]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
20#
 楼主| 发表于 2008-4-4 01:23:37 | 只看该作者

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

The following program recode 999 and 888 to '.' (for numerical variables) or '  ' (for characteristic variables). By revising it , you can recode missing to any number you want or recode any number to missing value.

[code:1cju2kty]%macro recodemiss(dataset);
data &amp;dataset;
set &amp;dataset;
  array num&#91;*&#93;  _numeric_;
  array char&#91;*&#93; _character_;
  do i=1 to dim(num);
      if num&#91;i&#93; = 999 or num&#91;i&#93;=888 then num&#91;i&#93;= &#46;;
  end;
  do j=1 to dim(char);
      if char&#91;j&#93;=999 or char&#91;j&#93;=888 then char&#91;j&#93;= ' ';
  end;
run;

%mend recodemiss; [/code:1cju2kty]
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-4 18:13 , Processed in 0.069118 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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