这是我的数据。
每个记录/行记录患者所在的位置以及文件日期和时间。因此,除了一天中的第一条记录外,我们可以计算自最后一条记录以来该头寸的保留时间。目的是标记记录,指示患者在同一天至少处于2个小时的位置:“右”,“后”,“左”。红色是应标记的行。为此,我认为我需要创建一个列,该列具有最后一次记录不同职位的时间。
答案 0 :(得分:0)
您正在计算position
的运行持续时间。当您遍历数据时,您将需要跟踪运行的position
和start
。可以使用retain
ed变量来完成跟踪。
data want;
set have;
by patientid date time; * add date and time to by statement so an error will log if the data is not in the required order;
if first.patientid then do;
run_position = position;
run_start = dhms (date,0,0,0) + time;
retain run_position run_start;
end;
if position = run_position then do;
hours_duration = intck ('hour', run_start, dhms(date,0,0,0) + time, 'continuous');
end;
else do;
* new run start;
run_position = position;
run_start = dhms (date,0,0,0) + time;
hours_duration = 0;
end;
flag_ge2hr = hours_duration >= 2;
run;
答案 1 :(得分:0)
使用NOTSORTED
选项可以更轻松地完成此操作。假设数据按日期和时间正确排序,这可能就是您需要的。
data want;
set have;
by ID position NOTSORTED;
retain start_time;
if first.position then start_time = observation_time;
duration = observation_time - start_time;
if duration > 2*60*60 then flag=1; *time is stored in seconds, so 2 hours * 60minutes * 60 seconds per hour;
run;
未经测试,因为没有数据。