为数据重组创建日期索引

Creating a date index for data restructure

我有一个如下例所示的数据集(每个参与者有数千行):

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.