如何在SAS Enterprise Guide中按日期分组取指定列最大值并保留全列
在SAS Enterprise Guide中实现按日期分组保留COL2最大值行的方法
方法一:使用PROC SQL(代码简洁,推荐)
通过分组计算每组COL2的最大值,再关联原表筛选出对应完整行:
PROC SQL; CREATE TABLE WANT AS SELECT A.* FROM HAVE A INNER JOIN ( SELECT COL1, MAX(COL2) AS MAX_COL2 FROM HAVE GROUP BY COL1 ) B ON A.COL1 = B.COL1 AND A.COL2 = B.MAX_COL2; QUIT;
代码说明:
- 子查询
B按COL1(日期)分组,计算每个日期对应的COL2最大值MAX_COL2 - 主查询将原表
A与子查询B关联,匹配日期和对应最大值,筛选出符合条件的完整行 - 若同一日期存在多个
COL2等于最大值的行,会全部保留;如需仅保留一行,可添加DISTINCT或额外排序条件
方法二:使用DATA步(适合自定义排序逻辑的场景)
先按日期分组、COL2降序排序,再利用BY组特性保留每组的第一行:
/* 按日期分组,同组内COL2降序排序 */ PROC SORT DATA=HAVE OUT=HAVE_SORTED; BY COL1 DESCENDING COL2; RUN; /* 保留每组的第一条记录(即COL2最大的行) */ DATA WANT; SET HAVE_SORTED; BY COL1; IF FIRST.COL1 THEN OUTPUT; RUN;
代码说明:
PROC SORT将数据按COL1分组,同组内按COL2从大到小排序,确保每组第一行是COL2最大值的行- DATA步中,
FIRST.COL1标记每组的第一条记录,通过OUTPUT仅保留该行 - 若同一日期有多个
COL2最大值,此方法仅保留排序后的第一行,可通过添加其他排序字段控制保留哪一行
SAS Enterprise Guide操作步骤
- 导入或连接你的源数据集(代码中用
HAVE指代,可替换为实际表名) - 新建SAS程序节点,粘贴上述任意一段代码
- 运行程序,生成的
WANT数据集即为符合需求的结果
内容的提问来源于stack exchange,提问作者dingaro
相关产品推荐
相关产品推荐

