添加基于重复ID的索引

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

假设有以下内容:

data DB;
  input ID :$20.;
cards;
0001 
0001 
0002 
0003 
0003 
0004
0004 
0004 
;

并且您知道 ID 是根据标准排序的。 有没有办法获得以下内容?

data DB1;
  input ID :$20. Index;
cards;
0001  1
0001  2
0002  1
0003  1
0003  2
0004  1
0004  2
0004  3
;

换句话说,我想根据每个重复ID的顺序(按ID组)添加一个增量数字索引。

提前谢谢您

sas
1个回答
0
投票

这是最佳数据步骤三重奏的一个很好的例子:按组处理、

first.
和求和语句。这个例子是使用它的最好的介绍之一。代码如下:

data want;
    set db;
    by id;

    if(first.id) then index=0;

    index+1;
run;

这就是它的作用:

  • 当我们遇到一组ID中的第一个值时,则将索引变量重置为0
  • 否则,对于每一行,将索引增加 1 并记住其先前的值

index+1
是以下代码的快捷方式:

data want;
    set have;
    retain index;
    index = index+1;
run;

sum 语句

index+1
自动递增一个值并保留该值。请记住,SAS 默认情况下会在读取每一行时使用
set
语句自动重置变量的值。由于我们不想重置索引并继续递增它,因此我们可以使用 sum 语句无限期地递增一个值,直到我们决定重置它。

© www.soinside.com 2019 - 2024. All rights reserved.