如何将SAS中按州、年份分组的多观测合并为单观测?
SAS多行数据合并为单行的实现方案
针对同一State和year分组下的多行费率数据合并需求,提供两种高效实现方法:
方法1:PROC SQL分组聚合
通过SQL分组,利用MAX()函数提取每组内各费率变量的非缺失值(每组内该变量仅存在一个有效值,MAX()会自动忽略缺失值):
proc sql; create table test_01 as select State, year, max(rt_15_30) as rt_15_30, max(rt_31_60) as rt_31_60, max(rt_61plus) as rt_61plus from test_00 group by State, year; quit;
方法2:DATA步+BY语句+RETAIN
先对数据集按分组变量排序,再用RETAIN保留变量值,仅输出每组最后一条观测:
步骤1:排序数据集
proc sort data=test_00; by State year; run;
步骤2:合并数据
data test_01; set test_00; by State year; /* 保留费率变量,避免每次循环重置 */ retain rt_15_30 rt_31_60 rt_61plus; /* 用当前观测的非缺失值更新保留变量 */ if not missing(rt_15_30) then rt_15_30 = rt_15_30; if not missing(rt_31_60) then rt_31_60 = rt_31_60; if not missing(rt_61plus) then rt_61plus = rt_61plus; /* 仅输出每组的最后一条观测 */ if last.year then output; run;
两种方法均可生成目标数据集test_01:PROC SQL写法简洁高效,适合常规场景;DATA步则更灵活,可扩展处理复杂合并逻辑。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

