【发布时间】:2016-11-14 15:17:22
【问题描述】:
我有一些数据:
data beforehave;
input ID TIME_EVENT $ Activity $;
datalines;
12345 07:03:875 Activity1
12345 07:04:004 Activity1
12345 07:05:062 Activity1
12345 07:07:357 Activity2
12345 07:10:743 Activity2
23145 07:12:737 Activity1
23145 07:14:065 Activity2
23145 07:15:037 Activity2
;
RUN;
我想获得一些看起来像这样的数据,我正在计算步骤之间的时间,但每次出现第一个活动 1 时都将计数器重置为 0;
data beforehave;
input ID TIME_EVENT $ Activity $ TIME_TAKEN;
datalines;
12345 07:03:875 Activity1 00:00:000
12345 07:04:004 Activity1 00:00:029
12345 07:05:062 Activity1 00:01:058
12345 07:07:357 Activity2 00:01:295
12345 07:10:743 Activity2 00:03:386
23145 07:12:737 Activity1 00:00:000
23145 07:14:065 Activity2 00:01:672
23145 07:15:037 Activity2 00:00:972
;
RUN;
我认为我需要从第一个 Activity1 为该 ID 发生的时间开始计算特定活动发生的时间。我曾考虑通过一个中间步骤来执行此操作,在该步骤中,我创建一个更新以跨越拳头Activity1 的TIME_EVENT 的字段。这个中间步骤看起来像这样;
data beforehave;
input ID TIME_EVENT $ Activity $ TIME_INTER;
datalines;
12345 07:03:875 Activity1 07:03:875
12345 07:04:004 Activity1 07:03:875
12345 07:05:062 Activity1 07:03:875
12345 07:07:357 Activity2 07:03:875
12345 07:10:743 Activity2 07:03:875
23145 07:12:737 Activity1 07:12:737
23145 07:14:065 Activity2 07:12:737
23145 07:15:037 Activity2 07:12:737
;
RUN;
要创建它,我可以先使用 SAS。函数并写了这个;
data OUT.DATA;
set IN.DATA;
if first.Activity = 'Activity1' then TIME_INTER = TIME_EVENT;
run;
从此我得到一个空白字段。
有人可以帮忙吗?
【问题讨论】:
-
您有输入数据吗?还是只有数据线?
-
时间值是什么意思?
07:03:875看起来不像是表示时间的有效方式。它不是 H:M:S,因为你怎么会有 875 秒?也许前两部分是分钟和秒,最后一部分是毫秒?如果是这样,那么为什么它以:而不是.为前缀?