楼主: xncdww
25336 6

[学习分享] PROC RANK 用法详解 [推广有奖]

  • 2关注
  • 4粉丝

硕士生

0%

还不是VIP/贵宾

-

威望
0
论坛币
624 个
通用积分
0
学术水平
0 点
热心指数
1 点
信用等级
1 点
经验
11351 点
帖子
62
精华
0
在线时间
154 小时
注册时间
2014-9-22
最后登录
2018-3-4

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
SAS的PROC RANK的分组功能很常用,可以把数据等分为几组。在此转载了一篇详细介绍Proc rank用法的帖子,供大家参考。
原文见gigu003的博客

proc rank 其实最主要的是掌握那几个选项,该proc 的整体语法结构如下:

proc rank <选项>;
var 变量;
ranks 新变量名字;
by 分组变量;
run;
这是一个整体的语法结构,举例,比如说我要对sashelp中的height排名次:

proc rank data=sashelp.class out=result;
var height;
run;
很显然就是这样写,用var来指定要排名次的变量,但是你运行该程序后会发现一个问题,就是原来的height的值都被名次代替了。如果我想保留原来的height值,那就需要用ranks语句了:
proc rank data=sashelp.class out=result;
var height;
ranks r_height;
run;
这样原来的height变量就不会动,生成名次变量r_height,这就是ranks的作用。

接着讲选项,排名次默认的方法是从小排到大的,那你如果需要从大到小来排,你就需要在选项proc rank <选项>;制定,比如说我要对sashelp的升高按照从大到小排名次,那么程序如下:

proc rank data=sashelp.class out=result descending;
var height;
ranks r_height;
run;
接着再讲相同值名次怎么算,比如说45 68 68 9,这四个数字从小到大排名次,sas默认拍出来的结果是

4 2.5 2.5 1 也就是相同值得话,名次怎么排,就是把相同的值得名次相加作平均。4 5 5 5 6 排名次的结果应该是 1 3 3 3 5 这些明白 ?OK? 继续
那么还有一种相同值的名次处理方法,刚才那种取名次均值得方法 叫做mean
proc rank data=sashelp.class out=result descending;
var height;
ranks r_height;
run;
等价
proc rank data=sashelp.class out=result descending ties=mean;
var height;
ranks r_height;
run;
也就是说sas默认相同值得名次用均值名次处理,然而sas还提供了另外两种处理方法:
一种就是去小的那个名次,举例子:4 5 5 5 6 排名次的结果应该是 1 2 2 2 5
proc rank data=sashelp.class out=result descending ties=low;
var height;
ranks r_height;
run;
另外一种就是取大的那个名次,4 5 5 5 6 排名次的结果应该是 1 4 4 4 5
proc rank data=sashelp.class out=result descending ties=high;
var height;
ranks r_height;
run;
所以可以通过制定ties=选项值 来让sas知道如何去处理相同值的名次
接着讲一个选项,名次用分数来表示,用排到的名次除以总人数,来作为rank的值。这时候就需要各选项fraction,用这个选项的时候一定要注意,如果你没有用ties=选项,那么sas默认的不再用均值处理名次
而是用最大的那种方法
proc rank data=sashelp.class out=result descending ties=mean fraction;
var height;
ranks r_height;
run;
这里拍出的rank实际上就是名次/总人数,这里的ties=mean不能身略,如果身略,那么sas默认ties=high
所以这里要注意。
NPLUS1 这个选项类同于fraction,前者除以(总人数+1) k/(n+1),后者处以(总人数) k/n
还有你把除出来的值进行百分比,也就是说你要再乘以100,那么就用percent选项。
proc rank data=sashelp.class out=result descending ties=mean percent;
var height;
ranks r_height;
run;

proc rank data=sashelp.class out=result descending ties=mean fraction;
var height;
ranks r_height;
run;
前者是k/n*100 ,后者是k/n 仅此区别而已。
接着再讲一个分组选项,有点份为数的意思,1 2 3 4 5 6 分成两组,首先从小到大或从大到小排列,然后均分成2组:

proc rank data=sashelp.class out=result descending ties=mean groups=2;
var height;
ranks r_height;
run;
groups=是用来指定分成几组,这里不是随机分组,是按照顺序以后的分组,也就是说排好名次后按名次顺序分组。

最后还剩下2个选项,一个选项是normal= 貌似将名次再正态化,有三种正态化方法 blom 、 tukey 、vw 这三种方法统计上怎么去正态化名次,公式分别是什么,请参照帮助。
最后一个选项SAVAGE ,就是对名次进行指数分布,公式参见帮助。

二维码

扫码加我 拉你入群

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

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

关键词:Rank RAN ROC SASHELP percent result 博客 程序

已有 2 人评分经验 热心指数 信用等级 收起 理由
eijuhz + 1 + 1 精彩帖子
prince315 + 10 鼓励积极发帖讨论

总评分: 经验 + 10  热心指数 + 1  信用等级 + 1   查看全部评分

沙发
mich_ard 发表于 2016-12-9 06:04:06 |只看作者 |坛友微信交流群
谢谢,总结的很全。前几天,我也提到过部分功能:

https://bbs.pinggu.org/forum.php?mod=viewthread&tid=4972809&page=1#pid40422143


你文章的 proc rank ... out=result descending 和 我提到的 proc rank descending 异曲同工,很有意思。

兄台的文章唯一不足,var 变量 和 by 分组变量 都是同一个变量 height,要是把sex当分组变量,可求得男女身高排序 - 分组并在组内各自排序也是proc rank的重要功能,就更完美了。

使用道具

藤椅
xncdww 发表于 2016-12-9 19:32:28 |只看作者 |坛友微信交流群
mich_ard 发表于 2016-12-9 06:04
谢谢,总结的很全。前几天,我也提到过部分功能:

https://bbs.pinggu.org/forum.php?mod=viewthread&tid ...
多谢提点,互相交流,共同进步!

使用道具

板凳
千叶765 发表于 2016-12-9 20:12:11 |只看作者 |坛友微信交流群
果然是大神,看完顿时豁然开朗!能请教楼主个问题吗?

已知c statistic means the area under the ROC curve, 同时根据寂静来说,计算公式是(concordant +0.5*tied)/100,莫非考题直接给出这几个值让我们套公式嘛?同时,不同的寂静对c statistic 却有不同的算法,所以我更加糊涂了。。学艺不精,研究了半天也没搞懂c statistic具体怎么手动计算出来的,请教大神能给个相关的题目和计算公式吗?或者告诉我书上什么地方具体讲了这块也可以的!多谢!!

使用道具

报纸
hengyejing 发表于 2016-12-9 22:00:39 |只看作者 |坛友微信交流群
谢谢楼主总结,帮助很大

使用道具

你好 想请问一下 为什么定义好group数 之后运行出来的结果 group 并不是连续的呢 比如 group=5;最后出来是 5 4 2 1 0 ; 定义group=10 结果却是 8 5 3 2 1 0;组数也不对呀。。。求解答。。。辛苦啦!

使用道具

7
坚持坚持lwb 学生认证  发表于 2017-11-5 07:53:15 |只看作者 |坛友微信交流群
蹦跶的小石头 发表于 2017-10-9 17:39
你好 想请问一下 为什么定义好group数 之后运行出来的结果 group 并不是连续的呢 比如 group=5;最后出来是 ...
可能中间有相同的数值,取mean的话,会跳过很多组。

使用道具

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

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

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

GMT+8, 2024-4-19 12:12