为循环中的项目分配编号 - SAS

时间:2014-01-14 22:49:26

标签: sql sas

每个ID号都有几个与之关联的项目。对于每个ID下的每个项目,我想为其分配一个数字。我希望每个ID的数字从1开始。我将如何在SAS中执行此操作?我猜我可以使用一种循环语句。以下是我的目标示例。谢谢你的帮助。

编辑:我必须为此问题添加另一层。如果ID具有item = SPECIAL,我希望始终为该记录分配1并使其他项跟随它。

+----+----------+----------+
|ID  |Item      |Assignment|
+----+----------+----------+
|A001|SPECIAL   |1         |
+----+----------+----------+
|A001|Orange    |2         |
+----+----------+----------+  
|A001|Pineapple |3         |
+----+----------+----------+
|A002|Banana    |1         |
+----+----------+----------+
|A002|Strawberry|2         |
+----+----------+----------+
|A002|Pear      |3         |
+----+----------+----------+
|A002|Watermelon|4         |
+----+----------+----------+
|A003|SPECIAL   |1         |
+----+----------+----------+
|A003|Banana    |2         |
+----+----------+----------+
|A003|Apple     |3         |
+----+----------+----------+

1 个答案:

答案 0 :(得分:3)

最简单的方法 - 使用BY语句和自动变量FIRST和LAST。原始数据集应按ID排序。

data have;
    input ID $ Item $;

    datalines;
A001 SPECIAL
A001 Orange
A001 Pineapple
A002 Banana
A002 Strawberry
A002 Pear
A002 Watermelon 
A003 SPECIAL   
A003 Banana
A003 Apple
;
run;

data want;
    set have;
    by ID;
    if FIRST.ID then Assignment=1;
    else Assignment+1;
run;

关于你的附加层:只需在IF语句中再添加一个条件:

 `if FIRST.ID or item='SPECIAL' then Assignment=1;`