请选择 进入手机版 | 继续访问电脑版
楼主: lizhewenbei
4075 3

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

  • 15关注
  • 5粉丝

副教授

36%

还不是VIP/贵宾

-

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

lizhewenbei 学生认证  发表于 2017-4-22 16:43:11 |显示全部楼层 |坛友微信交流群

+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
拉您进交流群

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

GMT+8, 2024-4-16 16:10