楼主: lizhewenbei
4461 3

[问答] 请教大家:proc sql中,容易求max和min,但是第二大,第三大怎么表述? [推广有奖]

  • 15关注
  • 5粉丝

已卖:668份资源

副教授

38%

还不是VIP/贵宾

-

威望
0
论坛币
304 个
通用积分
11.3270
学术水平
4 点
热心指数
13 点
信用等级
5 点
经验
9728 点
帖子
614
精华
0
在线时间
502 小时
注册时间
2008-2-6
最后登录
2025-11-27

楼主
lizhewenbei 学生认证  发表于 2017-4-22 16:43:11 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
请教大家:proc sql中,容易求max和min,但是第二大,第三大怎么表述?

proc sql;
  create table tem as
   select distinct *, max(score) as max_score,
from data
    group by class,student;
quit;


但是,我这里不仅仅想要全班最高分,还需要第二名,第三名的分数。应该怎么写呢?



二维码

扫码加我 拉你入群

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

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

关键词:proc sql ROC Min max sql

沙发
Strive、 发表于 2017-4-22 21:15:50 来自手机
sql还真没有想到方法,排个序取前几条观测倒是可以… 还有univariate过程可以输出极端值,也可以输出最大的几个和最小的几个
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
lizhewenbei + 3 + 3 + 3 精彩帖子

总评分: 学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

藤椅
lizhewenbei 学生认证  发表于 2017-4-22 21:54:24
Strive、 发表于 2017-4-22 21:15
sql还真没有想到方法,排个序取前几条观测倒是可以… 还有univariate过程可以输出极端值,也可以输出最大的 ...
univariate过程,可能还需要自己手工从输出窗口去提取,比较麻烦。排序倒是可以!如果要是能有个函数就更好了!非常感谢您!

板凳
foocares 发表于 2017-4-23 10:45:57
SAS官方论坛上看到的:

data have;
input id $ score @@;
datalines;  /*临时弄几个分数测试*/
S12 -20 S12  20 S12  10
S12  10 S12  20 S12 -50
S13 -40 S13  60 S13 -100
S14  10 S14  20 S14  0
S14 -30 S14 -20
;

/* change as needed to bring back desired ranking  */
%let start= 1;
%let end = 3;

/*  create table containing distinct id and value  -- needed b/c more than one id can have the same score */
proc sql;
create table dst_id_score as
select distinct id, score from have
order by id, score desc;  /* keep this sort order for ranking */
* NOTE: Table WORK.DST_ID_SCORE created, with 12 rows and 2 columns. ;

/*  assign ranking by id by score */
data temp;
set dst_id_score ;
by id;
if first.id then rnk=0;
rnk + 1;
run;
* NOTE: The data set WORK.TEMP has 12 observations and 3 variables. ;

/*  go back to original file and bring back all data meeting desired ranking  */
proc sql;
create table final_top_ranked as
select
  a.id
, a.score
, b.rnk as rank
from have a inner join temp b on a.id = b.id and a.score = b.score
where rnk between &start and &end
order by id, rnk;
* NOTE: Table WORK.FINAL_TOP_RANKED created, with 11 rows and 3 columns. ;

这一段里只要调start和end,那么不止前三名,原则上可以查询任何范围内的数据。

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-21 08:40