对数据集的相等值进行排名

问题描述 投票:0回答:1

我是 sas 编程新手,我对这个主题有疑问。

我有一个像这样的输入表

  CODE DESCRIPTION   COUNT
  NULL    KIT-KAT      3           
  NULL    KIT-KAT      3           
  NULL    KIT-KAT      3           
  NULL    FERRERO      2           
  NULL    FERRERO      1           

我想要一个像这样的输出表:

  CODE DESCRIPTION   COUNT  COLUMN_I_WANT
  NULL    KIT-KAT      3           1
  NULL    KIT-KAT      3           2
  NULL    KIT-KAT      3           3
  NULL    FERRERO      2           1
  NULL    FERRERO      1           2

问题是我尝试用排名进行分组,我使用了单调,并且做了几件事,但没有一个对我有用,我希望它计算一个字段的相等值但不重复该值,但如果有 3 个重复值,则输入 1,2 ,3,如我在示例中放入的表中所示。

这里我传递了我一直在测试的代码,但它对我不起作用

proc sql;
create table test2 AS
select *, count(t2.descripcion_tpv) AS progressive
from rank_2 as t1
LEFT JOIN RANK_2 AS T2 ON (T1.DESCRIPCION_TPV = T2.DESCRIPCION_TPV)
GROUP BY t1.descripcion_tpv
ORDER BY t1.descripcion_tpv;
quit;
sql sas
1个回答
2
投票

使用带有

by
组处理的数据步骤。

proc sort data=have;
    by description;
run;

data want;
    set have;
    by description;

    if(first.description) then rank = 0;

    rank+1;
run;

输出:

CODE    DESCRIPTION COUNT   rank
NULL    FERRERO     2       1
NULL    FERRERO     1       2
NULL    KIT-KAT     3       1
NULL    KIT-KAT     3       2
NULL    KIT-KAT     3       3

请注意,sum 语句

rank+1
相当于:

retain rank 0;
rank = rank+1;
© www.soinside.com 2019 - 2024. All rights reserved.