全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
717 13
2025-02-07
悬赏 66 个论坛币 已解决
楼主最近遇到一个数据处理和整合问题,具体请看附件里的 数据表和说明。
Sample Data.pdf
大小:(27.46 KB)

 马上下载

  
简单来说呢,就是附件里的左边表格是原始样本数据。 右边的表格是要实现的结果表格。

我们把原始数据叫做 dataset_1 那么想要的数据叫做 final_output。

首先是把这些人的ID 选出符合条件的。条件是每个ID的第一个start date 必须是在 2020年1月1日以后发生的就是疫情开始后的才算数。如果有的ID 的第一个 start date 是2019年10月发生的,那么不论他是否有2020年以后发生的start date,他所有的数据都该被剔除。

还有就是service count 就是服务统计。 想要实现的结果表格就是统计符合条件的人的服务的。 比如ID 009 的第一个start date 是4/9/2020 那么他就符合条件。 如果他后来又有三个服务日期分别发生在 9/2/2020, 11/5/2020, 和5/11/2021 那么就应该这样统筹到结果表格里。

比如Month 1 意味着 Day 1-30 也就是 4/9/2020 - 5/8/2020 期内发生的任何服务都算在Month 1的里面。

那么9/2/2020 是发生在 9/9/2020 - 10/8/2020 之间,那么这该算作 Month 6里面因为是在 Day 151-180 期内发生的。

但是 11/5/2020 是发生在 11/9/2020 - 12/8/2020 之间, 这个算做 Month 8 里面。我想要的表格里不关心Month 8 所以这个服务虽然是符合条件的,但是不必统计到结果表格里。

还有5/11/2021 是发生在 一年以后也就是 Month 12+ 那么这个只要是超过Day 365 的都算作一起,归纳到 Month 12+ 里即可。

金币不够,可以再加。 请把代码发到评论里。 谢谢支持。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2025-2-7 09:40:56
复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2025-2-10 11:46:12
whymath 发表于 2025-2-9 22:15
谢谢答复,这个 lag 的应用 还有 _temporary_ 我不怎么明白。 请详细解释一下。
  array _count_[13]_temporary_(13*0);   *13 stands for "Month 12+";
  array _sum_[13]_temporary_(13*0);
  if first.ID or categoryn^=lag(categoryn) then _count_[categoryn]+1;
  _sum_[categoryn]+service_count;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2025-2-10 11:57:38
whymath 发表于 2025-2-9 22:15
刚才可能我打错字了,出现的错误,现在纠正过来了,但是还是不怎么懂:  categoryn=ifn(ady>=365,13,ceil(ady/30)); 这一个的逻辑,和我上个评论里的问题。 现在我跑出的结果只有result1 也就是每个ID的第一个符合标准的服务期后30天内的 人数,服务次数,还有每个ID的平均服务次数。 为什么 result3, 6, 9, 12+ (13) 都是 0 人数, 0 服务次数,还有 N 的 平均服务次数。 我跑出结果后没有得到任何warning 和 error 的提示。 不到5分钟就出来结果了。

谢谢再次解答。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2025-2-10 22:17:08
reduce_fat 发表于 2025-2-10 11:46
谢谢答复,这个 lag 的应用 还有 _temporary_ 我不怎么明白。 请详细解释一下。
  array _count_[13]_t ...
不客气。

此处用 lag 函数是想要判断当前观测 categoryn 的值是否与上一条观测不同,如不同时,才累加 ID 的数量,这样就做到了每个 ID 在每个 categoryn(月份) 仅累加一次数量。
_temporary_ 关键字将当前数组标记为临时数组,数组元素不会保存为输出数据集的变量,一来让输出更干净,二来也比普通数组处理速度更快。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2025-2-10 22:27:45
reduce_fat 发表于 2025-2-10 11:57
刚才可能我打错字了,出现的错误,现在纠正过来了,但是还是不怎么懂:  categoryn=ifn(ady>=365,13,ceil ...
变量 ady 是每个 ID 当前观测的日期到该 ID 下第一条观测的日期的天数。

一楼的附件规定:
当 ady ≥ 365 时,当前观测分类为 Month 12+;
当 ady 处于 1~30 时,当前观测分类为 Month 1;
当 ady 处于 61~90 时,当前观测分类为 Month 3;
当 ady 处于 151~180 时,当前观测分类为 Month 6;
当 ady 处于 241~270 时,当前观测分类为 Month 9;

不难归纳:
当 ady ≥ 365 时,分类为 Month 12+;
否则,分类为 ceil(ady/30),此处的 ceil 表示向上取整;

可声明如下赋值语句:
复制代码
等价于
复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群