识别跨时间列中的模式

时间:2018-12-18 20:39:10

标签: sas

这是我的数据。

enter image description here

每个记录/行记录患者所在的位置以及文件日期和时间。因此,除了一天中的第一条记录外,我们可以计算自最后一条记录以来该头寸的保留时间。目的是标记记录,指示患者在同一天至少处于2个小时的位置:“右”,“后”,“左”。红色是应标记的行。为此,我认为我需要创建一个列,该列具有最后一次记录不同职位的时间。

2 个答案:

答案 0 :(得分:0)

您正在计算position的运行持续时间。当您遍历数据时,您将需要跟踪运行的positionstart。可以使用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;

未经测试,因为没有数据。