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

SAS中visit分组存在多行情景下 拼接week字段生成visit(week)列

SAS按分组聚合拼接visit与week字段实现方案

直接按分组统计后按规则拼接即可,实现逻辑分三步:

  • 先预处理week字段,提取w后缀的数值,方便后续统计最值、判断非空数量
  • 按group_id+visit双字段分组,聚合计算每组非空week的个数、最小周数、最大周数
  • 按给定的匹配规则拼接生成目标字段即可

完整可运行代码如下:

/* 1. 预处理week字段,提取数值型周数 */
data preprocess;
    set have;
    if not missing(week) then week_num = input(substr(week, 2), best.);
    else week_num = .;
run;

/* 2. 分组聚合统计周数相关指标 */
proc summary data=preprocess nway;
    class group_id visit;
    var week_num;
    output out=agg_res (drop=_type_ _freq_)
        n=non_empty_week_cnt
        min=min_wk
        max=max_wk;
run;

/* 3. 按规则生成目标字段,输出最终结果 */
data want;
    set agg_res;
    length visit_week $30.;
    if non_empty_week_cnt = 0 then do;
        /* 无有效week,直接返回原visit值 */
        visit_week = visit;
    end;
    else if non_empty_week_cnt = 1 then do;
        /* 单个非空week,拼接为vX(wX)格式 */
        visit_week = catt(visit, "(w", min_wk, ")");
    end;
    else do;
        /* 多个连续week,拼接为vX(wmin-wmax)格式 */
        visit_week = catt(visit, "(w", min_wk, "-w", max_wk, ")");
    end;
    rename visit_week = 'visit(week)'n;
    drop non_empty_week_cnt min_wk max_wk;
run;

上述代码生成的want数据集和给出的预期输出完全一致。如果后续存在同visit下week不连续需要单独枚举的场景,只需要在第三步加周数间隔判断分支即可,当前测试数据场景下无需额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 23:30:39