SAS 9.3 Proc排名问题(排名/排序路障)

时间:2014-11-10 23:54:30

标签: sas series proc

我正在使用以下格式的数据集:

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

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

代码或期望是否存在导致输出的错误,例如我所看到的输出? 另外还有一种更好的方法来生成一列连续数字数据的排序等级吗?

3 个答案:

答案 0 :(得分:4)

您可以在数据步骤中执行此操作,假设可以按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;

答案 1 :(得分:1)

想要让我知道我弄清楚如何使用它。

密钥位于Ties =(低或高或平均或密集)语句中。

这是适用的新代码。

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

滚动到底部以获取领带的功能

答案 2 :(得分:0)

或者暗示保留。

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