Sorting SAS数据集-为变量中的每个更改分配增量值-按时间戳排序
近似 我的数据集按ID排序,然后按时间戳排序。我需要创建一个“order”变量,随着状态的每次更改而递增,但我的排序必须保持时间戳,因此我认为我正确地建议by(group)不起作用。下面的订单字段说明了我所寻求的Sorting SAS数据集-为变量中的每个更改分配增量值-按时间戳排序,sorting,sas,Sorting,Sas,近似 我的数据集按ID排序,然后按时间戳排序。我需要创建一个“order”变量,随着状态的每次更改而递增,但我的排序必须保持时间戳,因此我认为我正确地建议by(group)不起作用。下面的订单字段说明了我所寻求的 ID Status Timestamp Order 188 3 12:15 1 188 4 12:45 2 188 4 13:10 2 188 3 14:20 3
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'也是分开的。正如你提到的,这与另一个问题非常相似。这里的技巧是将每组中第一次观察的顺序设置为零
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;
您可以使用
NOTSORTED
选项让SAS自动为您设置FIRST.STATUS
标志
data want ;
set have ;
by id status notsorted;
if first.id then order=0;
order + first.status;
run;
好极了非常感谢。