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

时间:2018-08-08 01:43:00

标签: sql sas proc-sql

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

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

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

例如。帐户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个日期。如果没有有效的方法,那么我很乐意接受任何帮助我最终结果的帮助。请帮助!!

谢谢!

1 个答案:

答案 0 :(得分:0)

假设数据按label.cell?.truncatesLastVisibleLine = true accountid进行排序,则该组上的简单DOW循环可以发现并输出最近“连续”运行日期的特征。

样本数据

从3年前开始的500个带有数百个日期的帐户是随机输出的。每42个帐户就会强制执行过去长期运行良好的情况

date

示例代码

对于每个帐户,检测并输出最近“连续”运行日期的功能

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;