使用PROC SQL筛选满足转会时间条件的联赛1球员观测数据
解决方案
你原有代码仅实现了「判断球员是否同时在两个联赛有效力记录」的逻辑,缺少对转会时间先后的校验,修改后可直接满足需求的代码如下:
PROC SQL; CREATE TABLE Shared_Players AS SELECT DISTINCT L1.*, CASE WHEN EXISTS ( SELECT 1 FROM League2 L2 WHERE L2.Player = L1.Player AND L1.End_Date < L2.Start_Date ) THEN "X" ELSE " " END AS Transferred FROM League1 L1; QUIT;
逻辑说明
- 保留联赛1的全部观测行,不会过滤掉不符合转会条件的球员记录,和你期望的输出结构一致
- 用
EXISTS子查询同时校验两个条件:球员在联赛2存在效力记录、该球员在联赛1的效力结束日期早于联赛2的效力开始日期,仅对同时满足两个条件的行标注X - 避免了子查询返回重复值导致的结果行数异常问题
注意事项
请确保两个数据集的Start_Date、End_Date为SAS日期类型,若为字符串格式,需要先转换为日期值再做比较,转换方法为INPUT(日期字段, MMDDYY10.)。
内容的提问来源于stack exchange,提问作者Jose
相关产品推荐
相关产品推荐

