我正在使用一个包含 ID、事件 ID、事件日期时间和事件原因的数据集。我的问题是,有时事件 ID 是唯一的,但事件日期时间、ID 和事件原因完全相同。在这种情况下,有没有办法创建一个变量来标记重复的观察结果?
数据如下
data test;
input ID event_ID$ event_dt_tm :datetime18. event$;
format event_dt_tm datetime20.;
datalines;
1 62-1 25NOV22:16:09:00 SaO2
1 62-2 25NOV22:16:09:00 SaO2
2 74-1 24FEB19:10:26:00 RR
2 74-2 03MAR19:19:11:00 HR
3 51-1 04DEC22:09:10:00 NC
3 51-2 04DEC22:09:10:00 NC
3 51-3 12DEC22:13:28:00 SaO2
;
run;
提前谢谢您!任何帮助将不胜感激
这是按组处理的一个很好的用例。首先,按
event_id event_dt_tm event
对数据进行排序,以便我们知道它是有序的。接下来,我们将应用按组处理并检查它是否不是组中的第一个值。如果不是,那么我们就知道 event_id event_dt_tm event
组中有多个值:
proc sort data=test;
by id event_dt_tm event;
run;
data want;
set test;
by id event_dt_tm event;
flag_duplicate_event = (first.event = 0);
run;
ID event_ID event_dt_tm event flag_duplicate_event
1 62-1 25NOV2022:16:09:00 SaO2 0
1 62-2 25NOV2022:16:09:00 SaO2 1
2 74-1 24FEB2019:10:26:00 RR 0
2 74-2 03MAR2019:19:11:00 HR 0
3 51-1 04DEC2022:09:10:00 NC 0
3 51-2 04DEC2022:09:10:00 NC 1
3 51-3 12DEC2022:13:28:00 SaO2 0
解释
当您使用按组处理时,您将解锁
first.
和 last.
特殊变量。它们分别是 1 或 0,具体取决于我们是在组的开头还是结尾。您可以根据变量值判断您在组中的位置:
这也是分层完成的。换句话说,如果我们有一组
group1 group2 group3
,first.group3
自动意味着我们正在寻找 group1 group2 group3
的独特组合。
换句话说,我们正在检查
id event_dt_tm event
的唯一组合是否是唯一的。如果 first.event
的值为 0,那么我们知道该组中有多个值。查看此问题的另一种方法是使用日志中的 put
语句并查看值如何变化:
data _null_;
set test;
by id event_dt_tm event;
if(_N_ = 1) then do;
put 'ID' +3 'first.id' +4 'first.event_dt_tm' +3 'first.event';
end;
put id +3 first.id +10 first.event_dt_tm +18 first.event;
run;
ID first.id first.event_dt_tm first.event
1 1 1 1
1 0 0 0
2 1 1 1
2 0 1 1
3 1 1 1
3 0 0 0
3 0 1 1