在SAS Enterprise Guide中用PROC SQL/SAS代码实现ID-EVENT分组的GRADE优先级聚合
SAS实现按ID-EVENT分组筛选优先级GRADE的两种方法
假设原始数据表名为original_data,包含字段ID(数值型)、EVENT(字符型)、GRADE(字符型,仅取值P/C/S),以下提供两种实现需求的方法:
方法一:常规SAS数据步+排序
先通过排序给GRADE按优先级(P > C > S)排序,再按ID-EVENT分组取第一条记录:
/* 按ID、EVENT分组,同时按GRADE优先级排序:P排最前,其次C,最后S */ proc sort data=original_data; by id event descending (grade='P') descending (grade='C') grade; run; /* 分组后仅保留每组的第一条记录(即优先级最高的GRADE) */ data result_data; set original_data; by id event; if first.event; /* 标记每组的第一条记录,仅输出该条 */ run;
方法二:PROC SQL分组判断
通过分组聚合判断每组是否存在P/C,按优先级返回对应GRADE:
proc sql; create table result_data as select id, event, /* 优先级判断:先检查是否有P,再检查是否有C,否则返回S */ case when max(grade='P') then 'P' when max(grade='C') then 'C' else 'S' end as grade from original_data group by id, event; /* 按ID和EVENT分组 */ quit;
两种方法均能得到符合需求的结果:
| ID | EVENT | GRADE |
|---|---|---|
| 123 | NY | P |
| 55 | MAD | C |
| 55 | LON | S |
内容的提问来源于stack exchange,提问作者unbik
相关产品推荐
相关产品推荐

