为数据重组创建日期索引
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.
我有一个如下例所示的数据集(每个参与者有数千行):
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.