SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 736|回复: 4
打印 上一主题 下一主题

请问一个应该是关于循环的问题

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2005-3-10 16:16:35 | 只看该作者

请问一个应该是关于循环的问题

有这样的一个表:
成绩  人数
90     5
91     1
82     3
. . . . .
60     8
先算出成绩80分以上的人数,如果人数<10,找出前10名的最低成绩。
头晕了,请帮帮忙!
thx!!!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2005-3-10 19:00:02 | 只看该作者

to madog

[code:c1e15]data score;
input score num;
datalines;
90 5
60 8
82 3
91 1
65 9
77 4
;
run;

proc sort data=score;
by descending score;
run;

/*统计超过80分的总人数*/
proc sql;
select sum(num) as total_num from score where score>=80;
quit;

/*寻找第10名的分数*/
data _null_;
length cum_num 8 i 8;
retain cum_num 0 i 0;
set score;
cum_num=cum_num+num;
if cum_num>=10 and i=0 then do;
i=1;
put score=;
end;
run;[/code:c1e15]

注:
1、以上程序没有太过思考,比较直白,效率不算高,但是逻辑还是易于理解的。你有兴趣,自己更可以试试SAS统计方面的过程步来实现。
2、只要把最后一段程序中“10”改成“n”,就实现了寻找第n名的分数的功能。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2005-3-10 20:22:53 | 只看该作者

如果这样呢?

真实感谢!很容易就看明白了。
假如改成以下这样呢?
首先找出分数在90以上的人数,如果人数少于10人,则依次减少分数,如:89、88.......,使该分数以上的人数不少于10人,最后列出分数和人数的分布情况。
谢谢!!!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2005-3-11 10:45:23 | 只看该作者

to madog

我的程序已经能够告诉你第10名的分数了,也就是说该分数以上的人数不少于10。根本不需要你想象的那么复杂,要做依次递减的循环。
如果你就是想做循环,那就用macro,但是我个人认为这个case没有意义。
[code:6e068]%macro score;
%do i=100 %to 0 %by -1;
proc sql noprint;
select sum(num) into :total_num from score where score>=&i;
quit;
%put score=&i;
%put count=&total_num;
%put;
%end;
%mend score;
%score;[/code:6e068]当然,还需要加%if判断等,自己完善吧,所有核心元素代码都已经有了。

关于频数,你的列出数据已经是频数表了。如果你的数据是name score,那么最好用proc freq来做。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2005-3-11 16:32:08 | 只看该作者

回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-3 01:31 , Processed in 0.083333 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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