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

在SAS中使用PROC SQL为唯一Apl_Key保留最低SCOR_RSLT_RAW_SCOR值

别担心,我帮你搞定这个问题!要实现每个Apl_Key只保留最低分数的行,有两种简单又常用的方法,我一步步给你讲清楚:

方法1:用PROC SQL分组取最小值

如果你习惯SQL语法,可以直接用分组聚合的方式获取每个键的最低分:

PROC SQL;
    CREATE TABLE want AS
    SELECT Apl_Key, MIN(SCOR_RSLT_RAW_SCOR) AS lowest_score
    FROM have  /* 这里替换成你原始表的实际名称 */
    GROUP BY Apl_Key;  /* 按唯一键分组计算 */
QUIT;

这个语句会按Apl_Key把数据分组,自动算出每组里SCOR_RSLT_RAW_SCOR的最小值,最后生成一个每个键对应一行最低分的新表want。

如果除了分数,你还需要保留该键对应的其他字段(比如原始行里的日期、类别信息),可以用子查询匹配完整行:

PROC SQL;
    CREATE TABLE want_with_details AS
    SELECT h.*
    FROM have h
    INNER JOIN (
        /* 子查询先找出每个键的最低分 */
        SELECT Apl_Key, MIN(SCOR_RSLT_RAW_SCOR) AS lowest_score
        FROM have
        GROUP BY Apl_Key
    ) sub
    ON h.Apl_Key = sub.Apl_Key AND h.SCOR_RSLT_RAW_SCOR = sub.lowest_score;
QUIT;

要是同一个键有多行都是最低分,这个方法会保留所有符合条件的行;如果只想留其中一行,可以在SELECT后面加DISTINCT或者用窗口函数进一步筛选。

方法2:用SAS DATA步+BY组处理

这是SAS原生的高效方法,适合处理大数据量:

/* 第一步:先按Apl_Key分组,再按分数升序排序(让最低分排在每组最前面) */
PROC SORT DATA=have OUT=sorted_have;
    BY Apl_Key SCOR_RSLT_RAW_SCOR;
RUN;

/* 第二步:只保留每个组的第一行(也就是分数最低的行) */
DATA want;
    SET sorted_have;
    BY Apl_Key;
    /* FIRST.Apl_Key是SAS自动生成的变量,每组第一行时为1,其余为0 */
    IF FIRST.Apl_Key THEN OUTPUT;
RUN;

这个方法逻辑很直观:排序后每个Apl_Key的行聚在一起,最低分在组的最前面,然后只输出每组的第一行,就得到了目标结果,还能直接保留该行的所有字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:22:21