【发布时间】:2015-07-07 09:05:45
【问题描述】:
我需要在 SAS proc-sql 中创建一些循环,将数据分组。 我有数据
ID1 ID2 TIME GROUP
1234 12 22MAY2015:16:10:00.000 0
1234 12 22MAY2015:16:15:00.000 0
1234 12 12JUN2015:6:35:00.000 0
1234 12 12JUN2015:16:35:00.000 0
6549 45 15APR2015:16:10:00.000 0
6549 45 18APR2015:13:15:00.000 0
6549 45 18APR2015:13:18:00.000 0
6549 15 22MAY2015:14:15:00.000 0
6549 15 22MAY2015:14:20:00.000 0
并且我需要创建新列 GROUP,对于那些具有相同 ID1、相同 ID2 且 TIME 之间的差异最大为 10 分钟的行,该列将具有相同的 ID。
结果将是:
ID1 ID2 TIME GROUP
1234 12 22MAY2015:16:10:00.000 1
1234 12 22MAY2015:16:15:00.000 1
1234 12 12JUN2015:6:35:00.000 2
1234 12 12JUN2015:16:35:00.000 3
6549 45 15APR2015:16:10:00.000 4
6549 45 18APR2015:13:15:00.000 5
6549 45 18APR2015:13:18:00.000 5
6549 15 22MAY2015:14:15:00.000 6
6549 15 22MAY2015:14:20:00.000 6
我尝试编写一些“do while”循环,但它不起作用。
data b;
set a;
time1 = time;
id1_1 = id1;
id2_1 = id2;
time2 = time;
id1_2 = id1;
id2_2 = id2;
group = group+1;
do while (id1_1 eq id1_2 id2_1 eq id2_2 floor((time2-time1)/60)<=10);
group = group;
time2 = time;
id1_2 = id1;
id2_2 = id2;
end;
run;
非常感谢。
【问题讨论】:
-
欢迎来到 SO,如果您发布您看到的任何错误消息,或者您解释为什么您编写的代码无法按预期工作,您将获得更好的响应。
-
嗨,这段代码正在运行,没有输出。在我看来,它是循环的。当我将它更改为直到它收到一些结果但在一个组列中每一行的数字相同。不知道这个方法好不好。我没有使用循环的经验,所以我认为有更好的方法或不同的方法来做到这一点。