类似于
如何为一组变量分配ID
我的数据集是按ID排序的,然后是时间戳。我需要创建一个"订单"变量,在说状态的每次更改上递增,但我的排序必须保持时间戳,所以我认为我在建议by(组)将不起作用时是正确的。下面的order字段说明了我要查找的内容…
ID Status Timestamp Order
188 3 12:15 1
188 4 12:45 2
188 4 13:10 2
188 3 14:20 3
189 10 11:00 1
189 11 13:00 2
189 10 13:30 3
189 10 13:35 3
第一个和第二个'3'是分开的,同样,第一个和后面的'10'也是分开的。
您可以使用NOTSORTED
选项让SAS自动为您设置FIRST.STATUS
标志。
data want ;
set have ;
by id status notsorted;
if first.id then order=0;
order + first.status;
run;
正如你所提到的,这与另一个问题非常相似。这里的技巧是将每组中第一次观察的顺序设置为0。
data temp;
input ID $ Status $ Timestamp $;
datalines;
188 3 12:15
188 4 12:45
188 4 13:10
188 3 14:20
189 10 11:00
189 11 13:00
189 10 13:30
189 10 13:35
;
run;
data temp2;
set temp;
by id;
if first.id then order = 0;
if status ~= lag(status) then order + 1;
run;