Proc SQL左连接未正确筛选各ID对应最早日期行问题排查
问题原因
- 你当前使用的是
LEFT JOIN(左连接),左连接的核心规则是完整保留左表(即你的want表)的所有记录,仅会对右表做匹配:匹配成功时右表字段返回对应值,匹配失败时右表字段返回空值。 - 你的查询语句仅选取左表的所有字段
a.*,没有添加任何过滤条件,所以最终输出和原want表完全一致,没有实现筛选效果。
正确实现方案
有两种常用写法可以达到你的预期:
方案1:左连接基础上增加过滤条件
添加WHERE子句筛选出匹配成功的行:
proc sql; create table firstjoin as select a.* from want a left join want3 b on a.date=b.mindate and a.id=b.id where b.id is not null; /* 仅保留匹配成功的行 */ quit;
方案2:改用INNER JOIN(内连接,更推荐)
内连接本身就只会保留左右两张表匹配成功的行,不需要额外加过滤条件,逻辑更简洁:
proc sql; create table firstjoin as select a.* from want a inner join want3 b on a.date=b.mindate and a.id=b.id; quit;
内容的提问来源于stack exchange,提问作者amestrian
相关产品推荐
相关产品推荐

