SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 817|回复: 2
打印 上一主题 下一主题

求助:数据优化(把列数值为0的值替换成该列非0的均值)

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2008-9-4 09:51:15 | 只看该作者

求助:数据优化(把列数值为0的值替换成该列非0的均值)

要求:把列数值为0的值替换成该列非0的均值,下面的代码是最简单的做法,如果表的字段多的话(比如有几百个字段),
请教:有什么好的方法可以实现?
%let mtab1;
%let mtab2;
data w15;
    input tab1 tab2 @@;
    cards;
1  0  3  4  0  6  4  4
7  0  11 9  0  0  6  8
;
run;
proc sql;
        select avg(tab1) into :mtab1
        from w15
        where tab1~=0;
        select avg(tab2) into :mtab2
        from w15
        where tab2~=0;
run;
data w15;
set w15;
if tab1=0 then tab1=&mtab1;
if tab2=0 then tab2=&mtab2;
run;
proc print data=w15;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2008-9-4 18:06:37 | 只看该作者

Re: 求助:数据优化(把列数值为0的值替换成该列非0的均值)

用数组?若有120个变量
data xxxx;
array arr{120} var1-var120;
do i=1 to 120;
    if arr{i}=0 then arr{i}=avg(arr{i});
end;
run ;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2008-9-5 09:46:57 | 只看该作者

Re: 求助:数据优化(把列数值为0的值替换成该列非0的均值)

如果表字段名是tab1-tabn,用数据是可以实现,但在实际建模的宽表中,表字段是多样的,如
国债账户累计至月底持有金额        DEBT_ACCT_BAL,
基金账户累计至月底份数        FUND_ACCT_UNITS
黄金买入点数        GOLD_PUR_AMT
黄金卖出点数        GOLD_SALE_AMT
点差收入        GOLD_CHANGE
理财账户账户余额        FINANCE_ACCT_BAL
理财账户账户发生额        FINANCE_TXN_AMT
理财账户账户月平均额        FINANCE_MONTH_DAY_AVG_BAL
这样数组就无法实现目的啦.
不知道有什么方法可以获得表的字段名和字段总数,如果有语句能得到表字段名和字段总数,我们就可以用循环来处理.
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-5 01:18 , Processed in 0.067756 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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