我有一个数据集,客户一年中连续多天购买商品,例如客户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日的结束日期。
答案 0 :(得分:2)
您要根据日期之间是否存在间隔对值进行分组。因此,进行测试并创建一个新的组号变量。然后,您可以在分析中使用新的分组变量。
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语句中调整天数,以调整您希望允许的差距,同时仍将事件视为同一组的一部分。