每个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 |
+----+----------+----------+
答案 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;`