如何使用PROC SQL基于双变量关联数据集 匹配数据步Merge结果
问题原因
- 重名警告触发原因:
data1和data2都包含office_id、office_id_flag两个匹配字段,你之前的SQL逻辑直接选取两个表的全部字段,重名字段冲突就会触发该警告。 - 行数不匹配原因:你之前的SQL代码大部分仅按
office_id单字段匹配,没有加入office_id_flag的校验规则,部分写法还用了左连接、全连接,和你原数据步的内连接逻辑不一致,自然会匹配到多余的观测。
正确实现代码
你可以直接用drop参数去除右表的重复匹配字段,避免手动列全所有字段的麻烦,代码如下:
proc sql; create table work.sql_innerjoin_result as select a.*, b.* drop=office_id office_id_flag from work.data1 a inner join work.data2 b on a.office_id = b.office_id and a.office_id_flag = b.office_id_flag; quit;
如果你更倾向于明确指定字段,也可以手动枚举data2的非匹配字段:
proc sql; create table work.sql_innerjoin_result as select a.*, b.er_vis, b.adm_hr, b.psych_hosp, b.psych_vis, b.region, b.region_rpc, b.charges from work.data1 a inner join work.data2 b on a.office_id = b.office_id and a.office_id_flag = b.office_id_flag; quit;
逻辑说明
- 用
inner join完全对齐你原数据步if dem and hosp的逻辑,仅保留两个表都能匹配上的观测 - 匹配条件同时校验
office_id和office_id_flag两个变量,符合你的关联规则 - 最终输出会包含
data1的10个字段加data2的7个非匹配字段,总字段数为17,和数据步输出完全一致
内容的提问来源于stack exchange,提问作者rlybby
相关产品推荐
相关产品推荐

