计算行为的持续时间/持续时间

时间:2018-08-31 08:18:24

标签: sas

我在SAS中有一个数据集,具有一组不同的行为,例如站立或躺着。

现在,只要孔组执行相同的操作(100%站立),我想找出这些行为的持续时间。我有一个带有lying100的列,如果100%说谎,则显示1,而在其他情况下则显示0。我还创建了一个列,在其中我设法用start标记了所有起点,并用end标记了观察的终点(虽然不确定是否有必要)

现在,我想找出这些说谎阶段中的每个阶段有多长时间(从开始到结束)。

我想象像this之类的东西。

1 个答案:

答案 0 :(得分:0)

与其他人一样,我不确定您要实现的目标。 这是我的理解。我想您有患者活动的数据集。它包含测量时间戳记和测量结果(如果是站立或放置)。根据您输入的图像数据集,我创建了以下内容:

data sequences(drop=lying100 length start_end);
    set test;
    BY NOTSORTED lying100;
    retain first_val;

    if FIRST.lying100 and lying100 eq 1 then
        first_val=length;

    if LAST.lying100 and lying100 eq 1 then
    do;
        duration=length-first_val;
        output;
        first_val=-1;
    end;
run;

如果您想在其中添加时间戳,这对我来说听起来也更合理,那么代码将如下所示:

data sequences(drop=lying100 length start_end timeline);
  set test;
  BY NOTSORTED lying100;
  retain start_time;
  format start_time datetime20.;
  format end_time datetime20.;

  if FIRST.lying100 and lying100 eq 1 then do;
    start_time=timeline;
  end;

  if LAST.lying100 and lying100 eq 1 then
    do;
      end_time=timeline;
      duration=(end_time-start_time)/60;
      output;
    end;
run;

其中

  • start_time:将是患者开始铺设的开始时间
  • end_time:将是患者躺下(他/她站起来)的时期的结束
  • 持续时间:患者躺下的分钟数

P.S。我没有使用start_end列。

我的测试数据可以使我的示例完整:

data test;
  infile datalines delimiter=',';
  input lying100 length start_end $;
  datalines;
0,0,
0,0,
1,1,start
1,2,
1,3,
1,4,
1,5,end
0,0,
0,0,
1,1,start
1,2,
1,3,
1,4,
1,5,
1,6,end
0,0,
0,0,
;

data test;
  set test;
  format timeline datetime20.;
  retain timeline '07sep2018 10:00:00'dt;
  timeline=timeline+5*60;
run;