SAS数据集-为变量中的每个更改分配增量值-按时间戳排序



类似于

如何为一组变量分配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;

最新更新