我正在尝试标记具有相同 ID 和日期但结果不同的观察结果。并非所有具有相同 ID 和日期的观察都会有不同的结果,但很大一部分会产生不同的结果。我已经为具有相同 ID 和日期的观察创建了一个标志变量,但在为不同结果创建标志时遇到了困难。
这是一些示例数据。
data test;
input ID Dt :mmddyy10. result;
format dt mmddyy10.;
datalines;
1 4-27-24 1
1 4-27-24 1
1 4-30-24 2
1 4-30-24 2
2 5-5-24 1
2 5-5-24 2
3 6-6-24 1
3 6-6-24 1
4 7-7-24 1
4 7-7-24 2
4 7-17-24 2
4 7-17-24 2
;
run;
提前谢谢您!!
您可以使用分组处理和滞后函数来实现这一点。我们将检查这是否是
id dt
组中的最后一个观测值,并确保存在多个 id dt
值,然后检查前一个值。如果相同,则返回 0。如果不同,则返回 1。由于滞后函数如何工作的一些特定怪癖,我们将首先创建滞后,然后每次获取时将其设置为缺失开始一个新的小组。
data want;
set test;
by id dt;
lag_result = lag(result);
if(first.dt) then lag_result = .;
flag_dupe_and_diff_result = (NOT first.dt AND last.dt AND result NE lag_result);
drop lag_result;
run;
ID Dt result flag_dupe_and_diff_result
1 04/27/2024 1 0
1 04/27/2024 1 0
1 04/30/2024 2 0
1 04/30/2024 2 0
2 05/05/2024 1 0
2 05/05/2024 2 1
3 06/06/2024 1 0
3 06/06/2024 1 0
4 07/07/2024 1 0
4 07/07/2024 2 1
4 07/17/2024 2 0
4 07/17/2024 2 0