代码之家  ›  专栏  ›  技术社区  ›  user2568648

在同一步骤中合并并创建合并数据集中的变量

  •  0
  • user2568648  · 技术社区  · 10 年前

    我正在合并SAS中的两个数据集“set_x”和“set_y”,并希望在合并后的数据集“match”中创建一个变量“E”:

    * Create set_x *;
    data set_x ;             
    input merge_key A B ;
    datalines;              
    1 24 25
    2 25 25
    3 30 32
    4 32 32
    5 20 32
    6 1 1
    ;
    run;
    
    * Create set_y *;
    data set_y ;             
    input merge_key C D ;
    datalines;              
    1 1 1
    2 2 1
    3 1 1
    4 2 1
    5 1 1
    7 1 1
    ;
    run;
    
    * Merge and create E *;
    data matched unmatched_x unmatched_y ;
    merge set_x (in=x) set_y (in=y) ;
    by merge_key ;
    if x=y then output matched;
           else if x then output unmatched_x ;
           else if y then output unmatched_y ;
      IF C = 2 THEN DO ;
           E = A ;
         END;
      ELSE DO ;
        E = floor(B - D) ;
      END ;
    run ;
    

    然而,在结果表“匹配”中,缺少E的值。如果我只输出匹配值(即使用 if x=y; ).

    如果输出不匹配和匹配的观测值,是否可以在同一数据步骤中创建“E”?

    1 回复  |  直到 10 年前
        1
  •  2
  •   Haikuo Bian    10 年前

    在计算E之前,您已经输出了结果,然后在下一次迭代开始时将E设置为缺失。所以你希望E在输出之前可用,

    data matched unmatched_x unmatched_y ;
    merge set_x (in=x) set_y (in=y) ;
    by merge_key ;
      IF C = 2 THEN DO ;
           E = A ;
         END;
    
      ELSE DO ;
        E = floor(B - D) ;
      END ;
    if x=y then output matched;
           else if x then output unmatched_x ;
           else if y then output unmatched_y ;
    
    run ;