You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SAS条件计数求助:统计动作A日期2年内的动作B次数

SAS实现方案:统计ID内2年内的动作B次数

核心思路

先将字符型日期转换为SAS可计算的日期值,再通过自连接统计或哈希表遍历的方式,计算每个DateofActionA对应的2年内(同一ID)DateofActionB的记录数。


步骤1:清洗日期数据

原数据中的日期是字符格式,需先转为SAS日期值才能进行计算:

data have_clean;
    set have;
    /* 自动适配多种日期字符串格式,转换为SAS日期值 */
    date_a = input(DateofActionA, anydtdte32.);
    date_b = input(DateofActionB, anydtdte32.);
    /* 可选:给SAS日期添加格式化显示 */
    format date_a date_b date9.;
run;

步骤2:计算Want列(两种方法可选)

方法一:PROC SQL自连接(直观易读)

适合中小数据集,通过自连接匹配同一ID下符合日期范围的记录,再分组计数:

proc sql;
    create table want as
        select 
            a.ID,
            a.DateofActionA,
            count(b.ID) as Want
        from have_clean a
        left join have_clean b
            on a.ID = b.ID
            /* 筛选DateofActionB在DateofActionA之后2年内的记录 */
            and b.date_b between a.date_a and intnx('year', a.date_a, 2, 'same') - 1
        group by a.ID, a.DateofActionA
        order by a.ID, a.date_a;
quit;
  • 日期范围说明:intnx('year', a.date_a, 2, 'same') - 1表示DateofActionA往后推2年的前一天(例如2020-07-01对应的截止日是2022-06-30),确保严格的2年区间。若需包含2年后的当天,去掉-1即可。

方法二:DATA步+哈希表(高效处理大数据)

当数据集行数较多时,哈希表避免了自连接的笛卡尔积,执行效率更高:

data want(drop=date_a date_b rc);
    set have_clean;
    by ID;
    
    /* 初始化哈希表,存储当前ID的所有DateofActionB */
    if _n_ = 1 then do;
        declare hash h(ordered:'a');
        h.defineKey('date_b');
        h.defineData('date_b');
        h.defineDone();
    end;
    
    /* 按ID分组,首次出现时加载当前ID的所有DateofActionB到哈希表 */
    if first.ID then do;
        h.clear();
        do until(last.ID);
            set have_clean(keep=ID date_b) by ID;
            h.add();
        end;
        /* 回到当前处理的记录 */
        set have_clean;
    end;
    
    /* 遍历哈希表,统计符合日期范围的记录数 */
    Want = 0;
    rc = h.find_ge(key:date_a);
    do while(rc = 0 and date_b <= intnx('year', date_a, 2, 'same') - 1);
        Want + 1;
        rc = h.find_next();
    end;
run;

注意事项

  • 若原日期格式有特殊情况,可调整INPUT函数的格式参数(比如用MMDDYY10.或DATE9.替代ANYDTDTE.)。
  • 可根据业务需求灵活调整2年区间的定义(包含/排除截止日)。

内容的提问来源于stack exchange,提问作者Noob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 03:32:50