SAS-对连续日期进行分组并查找每组的计数

SAS- Grouping consecutive dates and finding the count for each group

只是想找到最有效的方法。如果您查看下面的日期列,您会发现两个连续的组,其中第一组的最后日期为 2018-01-04,总数为 4,第二组的最后日期为 2018-01-13总数也是 4。

我的最终目标是获取最新组或最新连续天数。

已编辑:我想要 table 显示每个不同的帐户 ID,以显示最近连续几天的总计数。

例如。帐户编号:100012345 total_count_consec_days:400

帐户 ID:是唯一的

total_count_consec_days:该帐户 ID 的最新一组连续天数。

---日期---

2018-01-01

2018-01-02

2018-01-03

2018-01-04

2018-01-10

2018-01-11

2018-01-12

2018-01-13

我正在处理 4000 个不同的帐户,每个帐户平均有 500 个日期。如果没有有效的方法,那么我很乐意接受任何有助于我获得最终结果的帮助。请帮忙!!

谢谢!

假设数据按 accountiddate 排序,对组进行简单的 DOW 循环可以发现并输出最近 'run' 个连续日期的特征。

示例数据

500 个账户,有几百个日期,从大约 3 年前开始,随机输出。每42记长篇运行过去完结被逼

data have(keep=accountid date);
  do accountid = 1 to 500;
    stopdate = .;
    do date = today()-1000 to today();
      if mod(accountid,42) = 0 then do;
        if missing(stopdate) then stopdate = today()-100 * ranuni(123);
        if today()-500 < date < stopdate then output;
      end;
      else
      if ranuni(123) > 0.15 and date < today() - accountid/10 then
        output;
    end;
  end;
  format date stopdate yymmdd10.;
run;

示例代码

对于每个帐户,检测并输出最近 'run' 个连续日期的特征

data want (keep=accountid last_:);
  do _n_ = 1 by 1 until (last.accountid);
    set have;
    by accountid date;

    if dif(date) > 1 or _n_ = 1 then do; start_n = _n_; start_date = date; end;
  end;

  last_run_length = _n_ - start_n + 1;
  last_run_start_date = start_date;
  last_run_end_date = date;

  format last_run_start_date last_run_end_date yymmdd10.;
run;