首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建用于数据重构的日期索引

创建用于数据重构的日期索引
EN

Stack Overflow用户
提问于 2020-05-04 10:43:09
回答 1查看 56关注 0票数 1

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

代码语言:javascript
复制
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

对数据的一些解释:对于每个参与者,我们每天收集几个星期的数据(每个参与者有不同的开始和结束日期),测量他们使用智能手机的持续时间。

First,我要重新构造,以便为每个参与者和每个日期(第1天、第2天、.)计算持续时间和时间。应该是这样的:

代码语言:javascript
复制
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天、.)的持续时间总和。在这种情况下,日期是无关紧要的。

代码语言:javascript
复制
participant-ID       duration_sum_day1       duration_sum_day2     ...
----------------------------------------------------------------------
id-1                 53                      125                   ...
id-2                 23                      451                   ...

我很感谢你的建议!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-05 12:42:29

这需要几步。首先,我将重新创建要演示的示例数据:

代码语言:javascript
复制
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.

现在开始工作:

代码语言:javascript
复制
* 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.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61590358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档