添加基于另一个数据集的标志

问题描述 投票:0回答:1

假设有一个包含 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
          ..........
          ;

提前谢谢您,

最好的。

sas
1个回答
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;
© www.soinside.com 2019 - 2024. All rights reserved.