我有一个数据集,就像下面的例子一样(每个参与者有几千行)。
participant-ID date duration
-------------------------------------------
id-1 01.01.2020 35
id-1 01.01.2020 15
id-1 01.01.2020 3
id-1 02.01.2020 120
id-1 02.01.2020 5
id-2 20.01.2020 13
id-2 20.01.2020 10
id-2 21.01.2020 450
id-2 21.01.2020 1
一些数据的解释。对于每个参与者,我们每天都会收集几周的数据(每个参与者有不同的开始和结束日期),以测量他们使用智能手机的时间。
首先我想调整一下结构,使每个参与者和每个日期(第1天、第2天......)的持续时间总和都能计算出来。它应该是这样的。
participant-ID date day duration_sum
-----------------------------------------------------------
id-1 01.01.2020 1 53
id-1 02.01.2020 2 125
id-2 20.01.2020 1 23
id-2 21.01.2020 2 451
第二个我想创建另一个重组的数据集,这样我就有了每一个参与者的一行和每一天的持续时间总和(第1天,第2天,第3天,...)。在这种情况下,日期是不相关的。
participant-ID duration_sum_day1 duration_sum_day2 ...
----------------------------------------------------------------------
id-1 53 125 ...
id-2 23 451 ...
我很感谢你的任何建议
这需要几个步骤。首先我将重新创建你的示例数据来演示上。
data list list/ID (a10) date (edate10) duration (f6).
begin data
id-1 01.01.2020 35
id-1 01.01.2020 15
id-1 01.01.2020 3
id-1 02.01.2020 120
id-1 02.01.2020 5
id-2 20.01.2020 13
id-2 20.01.2020 10
id-2 21.01.2020 450
id-2 21.01.2020 1
end data.
现在开始工作。
* first step: summing durations per day (per ID).
dataset declare aggdata.
aggregate out=aggdata /break ID date /durationSum=sum(duration).
dataset activate aggdata.
* second step - creating a day index.
aggregate out=* mode=add /break ID/fstDay=min(date).
compute day=datediff(date, fstDay, "days")+1.
format day(f).
third step - restructure.
casestovars /id=ID /index=day /sep="_"/drop date.