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
相关产品推荐
相关产品推荐

