我在SAS中有一个数据集,具有一组不同的行为,例如站立或躺着。
现在,只要孔组执行相同的操作(100%站立),我想找出这些行为的持续时间。我有一个带有lying100
的列,如果100%说谎,则显示1,而在其他情况下则显示0。我还创建了一个列,在其中我设法用start
标记了所有起点,并用end
标记了观察的终点(虽然不确定是否有必要)
现在,我想找出这些说谎阶段中的每个阶段有多长时间(从开始到结束)。
我想象像this之类的东西。
答案 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;
其中
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;