首页 > 解决方案 > 连续运行的 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 日的结束日期。

标签: datesaslagretain

解决方案


您要求根据日期之间是否存在间隔对值进行分组。因此对此进行测试并创建一个新的组号变量。然后,您可以在分析中使用该新分组变量。

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 语句中的天数,以调整您希望允许的差距有多大,并且仍然将事件视为同一组的一部分。


推荐阅读