【问题标题】:SAS 9.3 Proc Rank Issues (Rank/Sort Road Block)SAS 9.3 Proc Rank 问题(Rank/Sort 路障)
【发布时间】:2014-11-10 23:54:30
【问题描述】:

我正在使用这种格式的数据集:

Column 1 (What I Have),     Column 2 (What I need to see)
8   1
8   1
8   1
9   2
9   2
9   2
10  3
10  3
10  3
11  4
11  4
12  5
13  6
14  7
14  7
14  7

尝试使用 Proc Rank 生成第二列 代码:

Proc Rank data=Have
out=Want
ties=low;
Var Column1; 
ranks Column2;
run;

我得到的输出如下所示:

Column1 (What I Have)   Column2 (What I get)
8   1
8   1
8   1
9   199
9   199
9   199
10  415
10  415
10  415
11  613
11  613
12  823
13  1015
14  1222
14  1222
14  1222

根据我所阅读和听到的内容,第一个数据集是我预期的结果。

代码或期望中是否存在导致输出(如我所见)的错误? 此外,有没有更好的方法来为一列连续的数字数据生成排序排名?

【问题讨论】:

    标签: sas series proc


    【解决方案1】:

    假设可以按 Column1 排序,您可以在数据步骤中执行此操作。

    proc sort data=have;
     by column1;
    run;
    
    data want;
       set have;
        by column1;
        retain column2 ;
        if _n_ = 0 then
           column2 = 0;
        if first.column1 then
           column2 = column2 + 1;
    run;
    

    【讨论】:

    • 在审查了我的声明后,我认为我需要澄清一下。我想生成第 2 列它不存在于数据集中。并回答您的问题是的,我们可以(并且确实)对第 1 列进行排序。
    • 这将创建第 2 列。
    【解决方案2】:

    想让您知道我知道如何使用它。

    关键在于 Ties=(Low or High or Mean or Dense) 语句。

    这是有效的新代码。

    Proc Rank data=Have
    out=Want
    ties=dense;
    Var Column1; 
    ranks Column2;
    run;
    

    现在我的数据集组都喜欢值并给它们相同的计数。使用正确的值生成第 2 列。文档在这里:

    http://support.sas.com/documentation/cdl/en/proc/61895/HTML/default/viewer.htm#a000146840.htm#a003186386

    滚动到底部以查看 Ties 的功能

    【讨论】:

      【解决方案3】:

      或者带有隐含的保留。

      DATA WANT;
         SET HAVE;
          BY COLUMN1;
          IF _N_ = 0 THEN
             COLUMN2 = 0;
          IF FIRST.COLUMN1 THEN
              COLUMN2 + 1;
      RUN;
      

      【讨论】:

      • 在查看了我的声明后,我认为我需要澄清一下。我想生成第 2 列。并回答您的问题@DomPazz 是的,我们可以(并且确实)对第 1 列进行排序。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-03
      • 2021-07-06
      • 2016-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多