如何在SAS 9.4中按年份与商品类别计算平均价格?
嘿,我明白你的困扰啦——之前只能单独按年份或商品算均值,现在要同时按这两个维度组合计算,在SAS 9.4里其实有两种很简单的实现方式,我给你一步步讲清楚:
第一步:先把你的样本数据导入SAS(可选,已有数据集可跳过)
先把你提供的原始数据转成SAS能识别的数据集,方便后续测试:
data prices; input Year Month Price Commodity $; datalines; 2004 1 1.592 Gas 2004 2 1.672 Gas 2005 1 1.766 Gas 2005 2 1.833 Gas 2006 1 2.009 Gas 2006 2 2.041 Gas 2004 1 1.95 Egg 2004 2 1.979 Egg 2005 1 1.97 Egg 2005 2 1.951 Egg 2006 1 2.032 Egg 2006 2 2.21 Egg 2004 1 2.879 Milk 2004 2 2.814 Milk 2005 1 2.786 Milk 2005 2 2.906 Milk 2006 1 3.374 Milk 2006 2 3.574 Milk ; run;
方法1:用PROC MEANS(新手友好的SAS统计过程步)
这是SAS里做分组统计最常用的工具,只需要把Year和Commodity同时放在CLASS语句里,就能实现双重分组的均值计算:
proc means data=prices noprint nway; class Year Commodity; /* 核心:同时按年份和商品分组 */ var Price; /* 指定要计算均值的变量 */ output out=annual_avg_prices mean=AvgPrice; /* 把结果输出到新数据集,均值列命名为AvgPrice */ run; /* 查看最终结果 */ proc print data=annual_avg_prices; title "各商品年度平均价格(PROC MEANS版)"; var Year Commodity AvgPrice; /* 只显示需要的列 */ run;
关键参数说明:
noprint:不输出默认的统计报表,只生成目标数据集nway:只保留所有分组变量组合的结果(不会生成单独按年份或单独按商品的汇总,正好解决你之前只能单独计算的问题)
方法2:用PROC SQL(适合熟悉SQL语法的用户)
如果你习惯用SQL语句,也可以用PROC SQL来实现,逻辑和其他SQL数据库完全一致:
proc sql; create table annual_avg_prices_sql as select Year, Commodity, mean(Price) as AvgPrice format=8.3 /* 计算均值并设置显示格式,保留3位小数 */ from prices group by Year, Commodity; /* 按年份和商品分组聚合 */ quit; /* 查看结果 */ proc print data=annual_avg_prices_sql; title "各商品年度平均价格(PROC SQL版)"; run;
两种方法生成的结果完全一致,都会得到一个包含Year、Commodity、AvgPrice的数据集,每条记录对应一个年份+商品的平均价格。
内容的提问来源于stack exchange,提问作者Prat
相关产品推荐
相关产品推荐

