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

如何通过SAS按通过状态分组统计各分数区间成绩占比

SAS按及格/不及格分组计算分数区间占比实现方案

整体逻辑很简单:先定义你需要的分数分段规则,再按Pass_Fail_Result分组统计组内各分段的占比即可,不需要复杂计算。

1. 准备数据集

如果是用你提供的示例数据,直接运行下面的代码建数据集就行;如果已经有现成的数据集,跳过这步,把后续代码里的score_data替换成你自己的数据集名。

data score_data;
    input Score Pass_Fail_Result;
    datalines;
405 0
410 0
430 0
520 1
550 0
630 0
710 1
720 1
;
run;

2. 自定义分数区间

用SAS的格式过程自定义分段规则,你可以根据业务需求随便改区间断点,比如你提到的504-560区间,直接在下面的代码里调整数值范围就行:

proc format;
    value score_segment
        0-<504    = '504分以下'
        504-<560  = '504-559分'
        560-<640  = '560-639分'
        640-high  = '640分及以上'
    ;
run;

3. 分组统计占比

用freq过程步直接算组内占比,不需要手动算频数除总数:

proc freq data=score_data;
    /* 按Pass_Fail_Result分组,统计Score分布 */
    tables Pass_Fail_Result * Score / 
        norow nocol nopercent  /* 关掉不需要的冗余统计值 */
        rowpct  /* 核心参数:计算每个Pass_Fail_Result组内的行百分比,就是你要的组内占比 */
        out=stat_result(keep=Pass_Fail_Result Score COUNT ROW_PCT); /* 把统计结果存到数据集方便后续复用 */
    /* 给分数套用之前定义的区间规则 */
    format Score score_segment.;
run;

结果解读

运行后输出的交叉表完全匹配你要的展示效果:

  • 行维度是Pass_Fail_Result的取值(0=不及格,1=及格)
  • 列维度是你定义的各个分数区间
  • 单元格内的Row Pct就是对应占比:比如用示例数据运行后,Pass_Fail_Result=1(及格)的分组里,33.33%的分数落在504-559区间,66.67%落在640分及以上区间,直接读就可以。

如果你需要把结果拼成“pass=1的成绩中,有X%的分数处于XX区间”这类自然语言,直接基于输出的stat_result数据集做文本拼接就行,不需要额外统计。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:21:21