SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

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

关于数据计算时遇到的取舍问题

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2005-2-3 14:34:32 | 只看该作者

关于数据计算时遇到的取舍问题

可能问题太简单了,但还是希望大侠能够帮助指点一下
有n个变量,要对其倒数的平方求和,如果其中有变量为零的话,无法进行求和或者取log,怎么统计出非0的变量数(richness)?
例如:
index=1/(a*a)+1/(b*b)+1/(c*c)+.....
或者index=log(a)+log(b)+log(c).....
假设b为0,或者b和c为0.
怎么让函数计算时舍去这个部分.
能否像excel那样写成IF(B3>0,LOG(B3))+IF(C3>0,LOG(C3).....?
假设我的数据是这样的:
a        b        c        d        e        f
20        0        30        50        4        5
10        10        0        50        4        5
5        10        30        0        4        5
4        10        30        50        0        5
2        10        30        50        4        5
1        10        30        50        4        0
7        0        30        0        4        0
8        10        30        50        4        5
4        0        30        0        4        5
10        10        30        50        0        5
20        10        30        0        4        5
10        10        30        50        4        5
20        10        30        50        0        5
30        10        0        50        4        5
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2005-2-23 17:07:55 | 只看该作者

回复

1. 如果有1个变量=0就删除这一行数据,可以用
data a1;set aa(原数据集);
if a=0 or b=0 or c=0 or d=0 or e=0 then delete;

2. 如果变量=0则变为缺失值,不参与计算,则可以用
if a>0 then a1=1/(a*a);else a1=.;
if b>0 then b1=1/(b*b);else b1=.;
...
if f>0 then f1=1/(f*f); else f1=.;
index=sum(of a1-f1);

可能这办法有点笨。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2005-2-28 18:55:26 | 只看该作者

借助数组!

可以借助数组来实现!
为使用方便,把变量名改为x1,x2,~,x5,设temp为初始数据集
data temp1;
set temp;
array x{5} x1-x5;
y=0;
do i=1 to 5;
if x(i)=0 then x(i)=.;
y+(1/x(i))^2;
end;
run;
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-8 23:46 , Processed in 0.070981 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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