如何使用SAS PROC函数提取最值对应整行数据并匹配运动鞋?
找出对应最高/最低销售额的运动鞋的正确SAS实现方法
方法一:PROC SQL 一步到位
直接通过子查询获取全局的最高、最低销售额,再匹配原表中的对应记录:
PROC SQL; SELECT sneaker, salesThisPeriod FROM M4.sneaker WHERE salesThisPeriod IN ( SELECT MIN(salesThisPeriod), MAX(salesThisPeriod) FROM M4.sneaker ); QUIT;
方法二:PROC MEANS + 数据步关联
先计算全局极值存储到临时表,再和原表关联筛选目标数据:
- 计算并存储销售额的极值
PROC MEANS DATA=M4.sneaker NOPRINT; VAR salesThisPeriod; /* 指定分析变量为销售额 */ OUTPUT OUT=sales_extremes MIN=min_sales MAX=max_sales; /* 将极值输出到临时表 */ RUN;
- 关联原表筛选对应运动鞋
DATA target_sneakers; MERGE M4.sneaker sales_extremes; IF salesThisPeriod = min_sales OR salesThisPeriod = max_sales; RUN; /* 查看结果 */ PROC PRINT DATA=target_sneakers; VAR sneaker salesThisPeriod; RUN;
原代码的问题说明
你原来的代码使用Class salesThisPeriod是错误的——Class语句是用来按指定变量分组计算统计量,这会把每个不同的销售额作为分组,计算每个分组的min/max(毫无意义),完全偏离了获取全局最高、最低销售额的需求。正确的做法是用VAR语句指定分析变量,去掉Class语句。
内容的提问来源于stack exchange,提问作者Robyn O'Halloran
相关产品推荐
相关产品推荐

