楼主: lizhewenbei
8302 10

请教大牛,如果有好几个人排名并列第3的时候,想取前3名怎么办 [推广有奖]

  • 15关注
  • 5粉丝

副教授

36%

还不是VIP/贵宾

-

威望
0
论坛币
309 个
通用积分
11.4770
学术水平
4 点
热心指数
13 点
信用等级
5 点
经验
9699 点
帖子
609
精华
0
在线时间
496 小时
注册时间
2008-2-6
最后登录
2024-1-9

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
请教大牛,如果有好几个人排名并列第3的时候,想取前3名怎么办?
比如:
data test;
        input class name $ score rank;
datalines;
1 张三 100 1
1 李四 99 2
1 王五 98 3
1 刘菲菲 98 3
1 大胖 98 3
2 李杰 100 1
2 刘飞 99 2
2 玛丽 98 3
2 兔兔 98 3
2 狗子 98 3
;
run;

每个班只要前三个人,在并列第三名中,随便挑一个人入选即可,比如就让王五入选,刘菲菲和大胖就不入选了。到底让谁入选不重要,比如按照首字母的排序取一个人。


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:怎么办 Input score Lines Data 刘菲菲 兔兔 字母

沙发
zhengbo8 发表于 2015-11-2 20:15:56 |只看作者 |坛友微信交流群
  1. data test;
  2.         input name $ score rank;
  3. datalines;
  4. 张三 100 1
  5. 李四 99 2
  6. 王五 98 3
  7. 刘菲菲 98 3
  8. 大胖 98 3
  9. ;
  10. run;

  11. proc sort data=test; by descending score name; run;

  12. data result;
  13.         set test;
  14.         by descending score name;
  15.         if _n_<=3;
  16. run;
复制代码
已有 2 人评分经验 论坛币 热心指数 收起 理由
李会超 + 60 精彩帖子
admin_kefu + 20 + 3 热心帮助其他会员

总评分: 经验 + 60  论坛币 + 20  热心指数 + 3   查看全部评分

使用道具

藤椅
lizhewenbei 学生认证  发表于 2015-11-2 21:53:55 |只看作者 |坛友微信交流群
zhengbo8 发表于 2015-11-2 20:15
您好,这种情况又该怎么办呢?每个班级取前三名(和前面一样,只要三个人)
data test;
        input class name $ score rank;
datalines;
1 张三 100 1
1 李四 99 2
1 王五 98 3
1 刘菲菲 98 3
1 大胖 98 3
2 张三 100 1
2 李四 99 2
2 王五 98 3
2 刘菲菲 98 3
2 大胖 98 3
;
run;

使用道具

板凳
fy250051181 发表于 2015-11-2 23:00:30 |只看作者 |坛友微信交流群
楼上正解。

使用道具

报纸
Chenny_Guo 在职认证  学生认证  发表于 2015-11-3 00:14:26 |只看作者 |坛友微信交流群
用 first.score呀 sort 完score就好了呀,按你说的
已有 1 人评分论坛币 收起 理由
admin_kefu + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

使用道具

地板
lizhewenbei 学生认证  发表于 2015-11-3 08:03:48 |只看作者 |坛友微信交流群
fy250051181 发表于 2015-11-2 23:00
楼上正解。
感谢,但是if _n_ le 3只能对第一个班级取前三名,第二个班级的前三名就被忽略了。

使用道具

7
lizhewenbei 学生认证  发表于 2015-11-3 08:04:40 |只看作者 |坛友微信交流群
Chenny_Guo 发表于 2015-11-3 00:14
用 first.score呀 sort 完score就好了呀,按你说的
按照first.score会将并列第三的同学都标示为3,这样我就不得不录用前五名,从而违背了初衷啊。

使用道具

8
yongyitian 发表于 2015-11-3 10:55:23 |只看作者 |坛友微信交流群
首先是制定规则,其次是编程。 如按照姓名排序,类似于2楼的方法.

  1. proc sort data=test out=test_sort;
  2.     by class descending score rank name;
  3. run;

  4. data want;
  5.     set test_sort;
  6.     by class;
  7.      if first.class then n=0;
  8.         n+1;
  9.     if n<=3;
  10.     drop n;
  11. run;
复制代码
已有 3 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
李会超 + 60 言之有理,规则才是第一要做的
lizhewenbei + 5 + 2 + 2 + 2 精彩帖子
admin_kefu + 10 热心帮助其他会员

总评分: 经验 + 60  论坛币 + 15  学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

使用道具

9
Chenny_Guo 在职认证  学生认证  发表于 2015-11-3 11:33:29 |只看作者 |坛友微信交流群
lizhewenbei 发表于 2015-11-3 08:04
按照first.score会将并列第三的同学都标示为3,这样我就不得不录用前五名,从而违背了初衷啊。
first.class =1 or first rank = 1 呢?
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
lizhewenbei + 5 + 2 + 2 + 2 精彩帖子

总评分: 论坛币 + 5  学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

使用道具

10
lizhewenbei 学生认证  发表于 2015-11-3 14:57:55 |只看作者 |坛友微信交流群
yongyitian 发表于 2015-11-3 10:55
首先是制定规则,其次是编程。 如按照姓名排序,类似于2楼的方法.
非常感谢啊!

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-20 04:34