date - 连续运行的 SAS 开始和结束日期
问题描述
我有一个客户在一年中连续多天购买商品的数据集,例如客户 A 在 1 月 1 日、1 月 2 日和 1 月 3 日购买,停止购买,然后在 2 月 1 日和 2 日再次购买2 月和 2 月 3 日。
我希望为每个客户捕获每个连续批次的第一个和最后一个日期(因此通常的 MIN / MAX 将错过日期之间的批次)。
我已经尝试了 RETAIN 和 LAG,我已经接近了,但它并不是我想要的。
如何创建为客户 A 显示两行的查询?即第 1 行显示 1 月 1 日的开始日期和 1 月 3 日的结束日期;第 2 行显示 2 月 1 日的开始日期和 2 月 3 日的结束日期。
解决方案
您要求根据日期之间是否存在间隔对值进行分组。因此对此进行测试并创建一个新的组号变量。然后,您可以在分析中使用该新分组变量。
data want ;
set have ;
by id date;
dif_days = dif(sales_date);
if first.id then group=1;
else if dif_days > 1 then group+1;
run;
您可以调整最后一个 IF 语句中的天数,以调整您希望允许的差距有多大,并且仍然将事件视为同一组的一部分。
推荐阅读
- node.js - 如何使用基于 Docker 映像的 Lambda 函数运行节点脚本
- javascript - 插件可以更改或添加到顺风配置
- r - 在 r 中,您将如何编写代码以根据两个分箱值的组合获取值?
- python - Flask-SQLAlchemy - 在 QuerySelectField 中获取不同的元素?
- javascript - 避免交叉路口观察者一次观察 2 个目标
- python - 无法对列表元素执行字符串操作
- solidity - 如何在 Solidity 中将地址列表或其他函数作为字节传递?
- java - 调用 REST API 调用使用 MQ 传输 zip 文件是否可行?
- typescript - 如何正确声明和初始化类的枚举属性?
- mybatis - 如何从 MybatisProperties 构建 SqlSessionFactory(Bean)?