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

在SAS中统计每条重复观测的重复总数的技术求助

问题分析

你当前的SAS代码生成的count是每个ID组内的行号(比如同一ID的记录依次显示1、2、3),但需求是让每条记录显示对应ID的总重复次数(同一ID的所有记录都显示该ID的总观测数),逻辑不符导致结果不符合预期。

解决方案

以下三种常用方法可实现需求:

方法1:Proc SQL关联统计(简单直观)

先统计每个ID的总记录数,再关联回原数据集:

proc sql;
    create table grouped as
        select a.*, b.total_count as count
        from have as a
        left join (
            select id, count(*) as total_count
            from have
            group by id
        ) as b
        on a.id = b.id;
quit;

方法2:双Data步实现(纯数据步逻辑)

先单独统计每个ID的总次数,再合并到原数据:

/* 第一步:统计每个ID的总记录数,仅保留每个ID的最后一条记录存储总次数 */
data id_total;
    set have;
    by id notsorted;
    retain total_count 0;
    total_count + 1;
    if last.id then output; /* 此时total_count为该ID的总观测数 */
    keep id total_count;
run;

/* 第二步:将统计结果合并回原数据集 */
data grouped;
    merge have id_total;
    by id notsorted;
    rename total_count = count;
run;

方法3:Hash表方法(高效处理大数据)

如果数据集较大,用Hash表可避免排序,提升处理效率:

data grouped;
    if _n_ = 1 then do;
        /* 创建存储ID与对应总次数的Hash表 */
        declare hash id_hash(dataset:'id_total'); /* 调用方法2生成的统计数据集 */
        id_hash.definekey('id');
        id_hash.definedata('total_count');
        id_hash.definedone();
    end;
    set have;
    rc = id_hash.find(); /* 根据当前ID匹配总次数 */
    rename total_count = count;
    drop rc;
run;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:55:20