楼主: verne_1
4469 5

[问答] proc rank问题 [推广有奖]

  • 2关注
  • 0粉丝

初中生

90%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
287 点
帖子
15
精华
0
在线时间
10 小时
注册时间
2013-12-4
最后登录
2015-11-15

楼主
verne_1 发表于 2013-12-11 08:39:17 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
proc rank normal=blom data=new;
ranks residr;
var resid;
run;这段指令什么意思啊,初学。。求大神指教

二维码

扫码加我 拉你入群

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

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

关键词:Rank RAN ROC normal resid normal

沙发
heperwong 在职认证  发表于 2013-12-11 11:22:31
对变量resid进行排序,排序的结果变量residr服从正态分布。

藤椅
是风啊 发表于 2013-12-11 23:04:13
这是我以前找到的关于proc rank过程的详细解释,出处忘了是哪儿了,就在网上搜了一下,看内容跟我看过得差不多,就直接贴过来了,特别强调此处是引用的,相信能够帮到你,嘿嘿,
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 ,就是对名次进行指数分布,公式参见帮助。

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
你不要走 + 1 + 1 + 1 精彩帖子

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

板凳
verne_1 发表于 2013-12-12 08:34:22
是风啊 发表于 2013-12-11 23:04
这是我以前找到的关于proc rank过程的详细解释,出处忘了是哪儿了,就在网上搜了一下,看内容跟我看过得差不 ...
论坛好人多!谢谢!

报纸
你不要走 发表于 2016-6-15 19:25:05
优秀,完全秒懂

地板
Don1993 发表于 2016-11-16 17:33:45
学习了。谢谢

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

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