【发布时间】:2021-12-01 09:38:42
【问题描述】:
我有两个数据集,它们都描述了球员在不同时间段内参加两个不同足球联赛的时间。有时球员会从一个联赛转移到另一个联赛。我想输出一个数据集,其中包含对联赛 1(数据集 1)的观察结果,其中球员在某个时间点在两个联赛中都打过球,并且球员在联赛 1(数据集 1)的时间结束日期在开始时间之前联赛 2 中的同一名球员(数据集 2)。
以下是数据集的描述:
数据集 1(联赛 1):
Player Start_Date End_Date
Mark Jones 09/19/2019 09/18/2021
Phil Lewis 09/07/2019 09/06/2020
Rena Williams 10/15/2018 10/15/2021
Roger Phelps 04/03/2016 05/15/2018
Trevor Knight 06/26/2017 04/20/2020
. . .
. . .
. . .
数据集 2(联赛 2):
Player Start_Date End_Date
Rhonda Mars 07/28/2017 06/05/2021
Jack Hines 01/02/2019 10/10/2021
Mark Jones 05/07/2015 09/18/2019
Roger Phelps 05/20/2018 10/10/2021
William Henderson 05/07/2017 03/28/2021
. . .
. . .
. . .
期望的输出示例:
Player Start_Date End_Date Transferred
Mark Jones 09/19/2019 09/18/2021
Phil Lewis 09/07/2019 09/06/2020
Rena Williams 10/15/2018 10/15/2021
Roger Phelps 04/03/2016 05/15/2018 X
Trevor Knight 06/26/2017 04/20/2020
这是我编写的示例代码,它只是给出了一个指示列来区分一个球员是否在两个联赛中都打过球:
PROC SQL;
CREATE TABLE Shared_Players AS SELECT DISTINCT *,
CASE
WHEN Player IN (SELECT DISTINCT Player FROM League2) THEN "X" ELSE " " END AS Transferred
FROM League1;
QUIT;
【问题讨论】:
-
你有没有尝试加入这两个表?比如名字? (更好的球员ID)。如果可能的话,您可以比较两组中的任何日期。
-
@theking2 你的意思是这样的吗?程序 SQL; CREATE TABLE Dummy AS SELECT * FROM League1 as x LEFT JOIN League2 as y ON x.End_Date
-
差不多。在 ON x.name = y.name。在 where 子句中进行日期比较。但这也可以继续进行,具体取决于定义的索引。