SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 680|回复: 5
打印 上一主题 下一主题

求教:计算多个变量的和,缺失数超过一半时不计算该记录总和如何实现

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2009-7-16 15:19:20 | 只看该作者

求教:计算多个变量的和,缺失数超过一半时不计算该记录总和如何实现

我要计算6个变量的和,如果超过三个变量(即超过一半的变量)为缺失时,不再计算该条记录的和;但是如果缺失变量个数不足一半时,用平均数补齐后计算这些变量的平均值。数据库如下:

data a;
  input  a b1 b2 b3 b4 b5 b6 c1 c2 c3 c4;
  cards;
  1 1 3 2 1 2 3 3 5 4 2
  2 2 3 1 2 3 1 2 4 3 2
  3 1 2 3 4 .  .  4 5 6 2
  4 1 2 . . .  .  2 5 4 3
  5 1 2 3 4 2 3 3 2 . .
;
run;
我要计算b=b1+b2+b3 +b4+b5+b6; c=c1+c2+c3 +c4;
算b时,第4条记录的情况不用计算,第3条记录的缺失值用b1+b2+b3+b4的平均值补齐后计算其和,计算c也是一样的情况;
SAS程序应如何编写?急求各位高手。
回复 支持 反对

使用道具 举报

0

主题

0

帖子

2

积分

新手上路

Rank: 1

积分
2
沙发
发表于 2009-7-16 15:52:54 | 只看该作者

Re: 求教:计算多个变量的和,缺失数超过一半时不计算该记录总和如何实现

[code:eqepyxtc]%macro sum(var,m);
array temp_&var  &var.1-&var.&m;
n=0;sum_&var=0;
do over  temp_&var;
if missing(temp_&var) then n+1;
sum_&var+ temp_&var;
end;
if n >&m./2 then sum_&var=.;
if n<=&m./2 and &m.>0  then sum_&var=sum_&var/( &m.-n)* &m.;
drop n;
%mend sum();
data v;
set a;
%sum(b,6);
%sum(c,4);
run;[/code:eqepyxtc]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2009-7-16 16:40:14 | 只看该作者

Re: 求教:计算多个变量的和,缺失数超过一半时不计算该记录总和如何实现

[color=#4000FF:3mr0ighu]谢谢大虾vicky1020 的回复,问题解决了,非常感谢,不过array,do over是什么意思啊,以前没用过,要学习的地方太多了[color=#4000FF][/color:3mr0ighu][/color]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2009-7-16 17:29:21 | 只看该作者

Re: 求教:计算多个变量的和,缺失数超过一半时不计算该记录总和如何实现

do over对隐含下标数组元素执行do组里的语句。
for example:

data test;
input sc01-sc05 @@;
array s sc01-sc05;
do over s;
   s=s*100;
end;
cards;
0.01 0.02 0.03 0.04 0.05
;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2009-7-17 09:46:45 | 只看该作者

Re: 求教:计算多个变量的和,缺失数超过一半时不计算该记录总和如何实现

明白了,谢谢楼上。 <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2009-7-17 10:40:54 | 只看该作者

Re: 求教:计算多个变量的和,缺失数超过一半时不计算该记录总和如何实现

[code:wgnvfrz7]data b;
        set a;
        b_sum=ifn(nmiss(of b1-b6) le 3,sum(of b1-b6,mean(of b1-b6)*nmiss(of b1-b6)),&#46;);
        c_sum=ifn(nmiss(of c1-c4) le 2,sum(of c1-c4,mean(of c1-c4)*nmiss(of c1-c4)),&#46;);
run;[/code:wgnvfrz7]
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-5 19:42 , Processed in 0.081133 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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