假设有一个包含 x 列(变量)的数据集“DB1”。您有一个名为“my_identifiers”的变量。然后,您有另一个数据集“DB2”,其中有一个名为“my_identifiers_subset”的变量。然后,如果 DB2 中的“my_identifiers_subset”值位于 DB1 中的“my_identifiers”中,则在 DB1 中添加一个列标志,其中包含 1,否则为 0。
有人可以帮助我吗?当比较涉及相同的数据集时,我知道如何处理这个问题,但在与外部数据集比较时,我不知道如何处理这个问题。
data DB1; input ID$ my_identifiers$; cards; 1 345 1 45 2 678 3 432 3 432 4 7 .......... ;
data DB2; input my_identifiers_subset$; cards; 345 432 44 .......... ;
所需输出:
data DB3; input ID$ my_identifiers$ Index$; cards; 1 345 1 1 45 0 2 678 0 3 432 1 3 432 1 4 7 0 .......... ;
提前谢谢您,
最好的。
因此,使用
proc sql
并加入 2 个数据集可能是最简单的解决方案。您有几种不同的选择。
首先,您可以使用
EXISTS
和子查询来确定 DB1.my_identifiers
是否在 db2.my_identifiers_subset
中。或者您可以执行 LEFT JOIN
来达到相同的效果。第二个解决方案的唯一警告是 db2
可能有相同 my_identifiers_subset
的多个实例,在这种情况下,您将获得额外的行。
PROC SQL;
CREATE TABLE DB3_EXISTS AS
SELECT *,
CASE
WHEN EXISTS (SELECT * FROM DB2 WHERE DB2.my_identifiers_subset = DB1.my_identifiers)
THEN 1
ELSE 0
END AS INDEX
FROM DB1
;
CREATE TABLE DB3_LEFT_JOIN AS
SELECT DB1.*,
CASE
WHEN DB2.my_identifiers_subset IS NULL
THEN 0
ELSE 1
END AS INDEX
FROM DB1
LEFT JOIN DB2 ON DB2.my_identifiers_subset = DB1.my_identifiers
ORDER BY DB1.ID
;
QUIT;