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

SAS中使用DO循环统计球队胜场数及比赛总场数方法咨询

SAS球队胜场统计与比赛总场数计算实现方案

原有代码错误原因

你写的代码逻辑完全不匹配需求,核心问题如下:

  • 定义的数组ray仅绑定了game单个字符变量,dim(ray)返回值为1,循环仅会执行1次,无法实现计数逻辑
  • 循环内手动添加i=i+1会打乱SAS循环的自动计数规则,还会输出冗余重复观测
  • 没有关联winning_team字段的统计逻辑,完全无法实现球队胜场统计需求

正确实现代码

需求1:统计每支球队累计获胜总场次

可以通过两种常用方法实现,结果一致:

/* 方法1:PROC FREQ实现,输出胜场统计数据集 */
proc freq data=array noprint;
    tables winning_team / out=win_count(keep=winning_team count rename=(count=累计获胜场次));
run;
/* 打印查看结果 */
proc print data=win_count noobs title="各球队累计获胜场次";
run;

/* 方法2:PROC SQL实现,逻辑更直观 */
proc sql;
    create table win_count as
    select winning_team, count(*) as 累计获胜场次
    from array
    group by winning_team;
quit;

需求2:使用DO循环识别已完成的比赛总场数

用DO UNTIL循环遍历全数据集,逐行计数即可:

/* DO循环统计总比赛场数 */
data 总比赛场数统计;
    已完成比赛总场数 = 0;
    /* 循环读取所有观测直到数据集末尾 */
    do until(read_end);
        set array end=read_end;
        已完成比赛总场数 + 1;
    end;
    keep 已完成比赛总场数;
    output;
run;
/* 打印查看结果 */
proc print data=总比赛场数统计 noobs title="已完成比赛总场数";
run;

运行结果说明

基于你提供的测试数据集,运行后得到结果:

  • 已完成比赛总场数为4
  • 各球队累计获胜场次均为1,分别为Berfield、Jacksons、UCI、Nottingham各胜1场

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:15:07