如何在SAS Enterprise Guide的单条PROC SQL查询中按列分组计算均值
SAS PROC SQL添加分组均值列的实现方案
符合需求的修改后查询
proc sql; create table work.my_table as select ID , COUNTRY , VALUE , AVG(VALUE) OVER (PARTITION BY corrected_country) as MEAN_1 format=8.1 from ( -- 先修正COUNTRY字段的拼写错误,把变体统一归为FRANCE select ID , COUNTRY , VALUE , case when COUNTRY in ('FRAMNCE', 'FRAMCE') then 'FRANCE' else COUNTRY end as corrected_country from library1.table1 ) ;quit;
关键逻辑说明
- 拼写修正:原始数据里
FRAMNCE、FRAMCE是FRANCE的拼写错误,通过子查询的CASE语句将这些变体统一映射为FRANCE,保证分组逻辑匹配你给出的计算规则。 - 窗口函数计算均值:使用
AVG() OVER (PARTITION BY corrected_country)实现分组均值计算,这个窗口函数会为每一行匹配对应分组的均值,无需额外的分组聚合操作。 - 格式控制:通过
format=8.1指定均值的显示格式,让输出和期望结果的小数格式一致。
简化版本(不修正拼写)
如果不需要处理拼写错误,仅按原始COUNTRY分组,可用以下代码,但此版本会把FRANCE、FRAMNCE、FRAMCE分成三个独立分组,均值分别为1、2、3,不符合你的期望输出:
proc sql; create table work.my_table as select ID , COUNTRY , VALUE , AVG(VALUE) OVER (PARTITION BY COUNTRY) as MEAN_1 format=8.1 from library1.table1 ;quit;
内容的提问来源于stack exchange,提问作者dingaro
相关产品推荐
相关产品推荐

