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

如何在SAS数据步中按MID统计Method_ALL=1的匹配记录数?

用SAS数据步按MID统计Method_ALL=1的记录数

需求说明

针对包含多个MID值的数据集,按每个MID分组统计:

  • 该MID的总记录数(Count_REC)
  • 其中Method_ALL等于1的记录数(Match_Count)
    要求仅使用SAS数据步实现,不使用PROC SQL。

输入数据示例

MID   Method_ALL
334      1
334      0
334      1
334      1
334      1

期望输出结果

MID   Method_ALL   Count_REC   Match_Count
334      0           5           4

SAS数据步实现代码

/* 先按MID排序,确保数据步能按组处理 */
proc sort data=input_data;
    by MID;
run;

/* 数据步分组统计 */
data output_summary;
    set input_data;
    by MID;
    /* 保留计数变量,避免每次循环重置 */
    retain Count_REC Match_Count 0;
    
    /* 每组第一条记录时初始化计数器 */
    if first.MID then do;
        Count_REC = 0;
        Match_Count = 0;
    end;
    
    /* 累计总记录数 */
    Count_REC + 1;
    /* 统计Method_ALL=1的记录数 */
    if Method_ALL = 1 then Match_Count + 1;
    
    /* 每组最后一条记录时输出汇总结果 */
    if last.MID then do;
        Method_ALL = 0;
        output;
    end;
run;

代码说明

  1. 排序预处理:用proc sort按MID排序,保证同一MID的记录连续排列,这是数据步by分组处理的必要前提。
  2. 变量持久化:retain语句让计数变量在数据步循环中保留上一次的值,不会因读取新记录重置为缺失。
  3. 分组初始化:first.MID标记每组第一条记录,此时重置计数器,确保每组统计独立。
  4. 计数逻辑:
    • Count_REC + 1自动累计总记录数,初始值默认取retain设置的0。
    • 仅当Method_ALL=1时,Match_Count加1,精准统计目标记录数。
  5. 输出控制:last.MID标记每组最后一条记录,此时按需求设置Method_ALL为0,输出该组的汇总结果,避免输出原始明细行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 07:53:24