如何生成与SAS Proc Compare打印结果结构一致的输出数据集并解决ID重复问题
SAS PROC COMPARE 输出ID重复问题解决方法
问题原因
你当前代码中使用的outbase、outcomp参数默认会为每个存在差异的ID分别生成两条记录:
- 一条标记
_TYPE_='BASE',存储base数据集的对应取值 - 一条标记
_TYPE_='COMPARE',存储compare数据集的对应取值
因此会出现ID变量bridge_recip_id重复出现的问题。
解决方案
方案1:使用TRANSPOSE参数(推荐,适配SAS 9.4及以上版本)
在PROC COMPARE语句中添加transpose参数,该参数会自动将BASE和COMPARE的取值转为列维度存储,每个ID仅保留一行记录,完全匹配你需要的输出结构:
proc compare base= b compare=c out= discordant outnoequal outbase outcomp transpose; id bridge_recip_id; run;
方案2:手动转置处理(适配低版本SAS)
如果你的SAS版本不支持transpose参数,可以对现有输出数据集做二次处理,合并同一ID的两条记录为一行:
* 按ID和记录类型排序; proc sort data=discordant; by bridge_recip_id _type_; run; * 合并同ID的BASE和COMPARE记录,按需求重命名字段; data discordant_final; merge discordant(where=(_type_='BASE') rename=(/* 按你的实际字段列表修改,示例如下 */ _obs_ = obs_base 变量1 = 变量1_base 变量2 = 变量2_base )) discordant(where=(_type_='COMPARE') rename=( _obs_ = obs_comp 变量1 = 变量1_comp 变量2 = 变量2_comp )); by bridge_recip_id; drop _type_ _diff_; * 按需删除不需要的中间字段; run;
内容的提问来源于stack exchange,提问作者Megan Halbrook
相关产品推荐
相关产品推荐

