注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

数据挖掘

学习数据挖掘

 
 
 

日志

 
 

proc rank  

2013-11-16 19:47:03|  分类: SAS |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

源自:上海—横刀老马的讲座

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 ,就是对名次进行指数分布,公式参见帮助。
讲完了!

  评论这张
 
阅读(358)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017