Sas 计算行为的持续时间/长度

Sas 计算行为的持续时间/长度,sas,Sas,我在SAS中有一个数据集,有一组人的不同行为,如站立或躺着 现在我想知道,每当洞组做同样的事情(100%站立)时,这些行为的持续时间。我有一个列,上面有lying100,如果100%的人在说谎,则显示为1,在任何其他情况下显示为0。我还创建了一个列,在其中我用start标记了所有的起点,用end标记了观察的终点(但不确定是否有必要) 现在我想知道每个说谎阶段(从开始到结束)有多长 我的想象是这样的。像其他人一样,我不确定你到底想要实现什么。 这就是我的理解。我想你有病人活动的数据集。它包含测量时

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

现在我想知道,每当洞组做同样的事情(100%站立)时,这些行为的持续时间。我有一个列,上面有
lying100
,如果100%的人在说谎,则显示为1,在任何其他情况下显示为0。我还创建了一个列,在其中我用
start
标记了所有的起点,用
end
标记了观察的终点(但不确定是否有必要)

现在我想知道每个说谎阶段(从开始到结束)有多长


我的想象是这样的。

像其他人一样,我不确定你到底想要实现什么。 这就是我的理解。我想你有病人活动的数据集。它包含测量时间戳和测量结果(如果是站立或铺设)。基于图像中的输入数据集,我创建了如下内容:

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;
如果您想在其中添加时间戳,对我来说这听起来也有点合理,那么代码将如下所示:

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;
在哪里

  • 开始时间:将是患者开始下床的开始时间
  • 结束时间:将是患者下床(他/她站起来)时的结束时间
  • 持续时间:患者下床的分钟数
另外,我没有使用“开始”和“结束”列

完成示例所需的测试数据:

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;

你试过什么吗?我试过first.variable和last.variable。问题是,我无法按排序方式对数据进行排序,因为为了能够确定长度,我需要按排序方式对数据进行排序。您是否可以将数据键入“have”,然后将结果数据显示为“want”,而不是图片。描述将项目标记为开始和结束的逻辑。请说明“长度”是指从开始到结束的记录数,还是长度值的总和?此外,还应包括任何尝试过的代码以及出现的日志警告或错误。您通常可以在BY group语句中使用NOTSORTED选项,但如果您显示了示例数据以及您期望的最小值,则该选项将非常有用。