为数据重组创建日期索引

问题描述 投票:1回答:1

我有一个数据集,就像下面的例子一样(每个参与者有几千行)。

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                   ...

我很感谢你的任何建议

dataset spss
1个回答
1
投票

这需要几个步骤。首先我将重新创建你的示例数据来演示上。

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.
© www.soinside.com 2019 - 2024. All rights reserved.