SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 781|回复: 1
打印 上一主题 下一主题

sum的问题求助

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2012-4-17 05:07:35 | 只看该作者

sum的问题求助

data temp;
input id y;
cards;
1 104.932
2 107.732
3 103.121
4 103.340
5 104.653
6 101.401
7 95.430
8 98.784
9 102.981
10 98.921
11 94.178
12 90.831
13 98.756
14 93.079
15 99.559
16 99.036
17 98.258
18 90.956
19 89.173
20 89.344
run;
我想做的就是
对于第i个id,算出sum=sum_{yj>yi}(yj )
我能想到的就是用do loop,但是结果不对

这个要怎么做呢?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2012-4-21 19:41:52 | 只看该作者

Re: sum的问题求助

下面是不是你要的结果:

data temp;
input id y;
cards;
1 104.932
2 107.732
3 103.121
4 103.340
5 104.653
6 101.401
7 95.430
8 98.784
9 102.981
10 98.921
11 94.178
12 90.831
13 98.756
14 93.079
15 99.559
16 99.036
17 98.258
18 90.956
19 89.173
20 89.344
;
run;

%macro sm;

%let nfile=%sysfunc(open(temp));
%let nrw=%sysfunc(attrn(&nfile,nlobs));
%let rc=%sysfunc(close(&nfile));

proc iml;
use work.temp;
read all into mx;

nrw=nrow(mx);

%do i = 1 %to &nrw;
  s=0;
  m1=mx[&i,2];
  %do j=1 %to &nrw;
    m2=mx[&j,2];
    if (m2>m1) then do;
      s=s+m2;
        end;
    print s;
  %end;
%end;
quit;
%mend;
%sm;
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-6 18:11 , Processed in 0.077284 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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