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

左连接返回空格

  •  2
  • 78282219  · 技术社区  · 7 年前

    我执行了一个左连接,其中左表有500000个观察值。在某些情况下,对于Business\u Line=“Retail”来说,左连接是成功的,因为下一个观察结果为空,这是为什么?

    我使用的代码:

    proc sql;
    create table joined2 as
    select a.*
          ,b.Join1
          ,b.Join2
          ,b.Join3
    from joined as a
    left join Sasdata.Assumptions as b
    on a.Business_Line = b.Business_Line;
    quit;
    

    这两张桌子看起来像

    data joined;
    input Business_Line $;
    datalines;
    Retail
    Retail
    Retail
    Business
    Business
    ;
    run;
    

    要加入的表如下所示

    data sasdata.assumptions;
    input Business_Line $ Join1 Join2 Join3;
    datalines;
    Retail 10% 10% 10%
    Business 20% 10% 5%
    ;
    run;
    

    当前生成的表如下所示

     business_line join1 join2 join3
     Retail 10% 10% 10%
     Retail . . .
     Business 20% 10% 5%
     Business . . .
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Richard    7 年前

    示例代码未演示此问题。

    实际上,缺少的值 join1-join3 当实际business\u lines值为 'Retail' Business . 结果是零售业为3x1行,商业为2x1行。

    如果左表中的联接键在右表中没有相应的匹配项,则会出现缺少的值。这个罐子 显得 如果变量已格式化,则在SAS中发生。

    假设business\u line是一个带格式值的整数

    proc format;
      value line
        101 = 'Retail'
        102 = 'Retail'
        103 = 'Retail'
        201 = 'Business'
        202 = 'Business'
      ;
    

    使用格式化的business\u行更新数据

    data joined;
    input Business_Line;
    format Business_Line line.;
    datalines;
    101
    102
    102
    201
    202
    run;    
    
    data assumptions;
    input Business_Line Join1 Join2 Join3;
    format Business_Line line.;
    datalines;
    101 10 10 10
    201 20 10  5
    run;
    

    具有一些不匹配的基础值的联接

    proc sql;
    create table joined2 as
    select a.*
          ,b.Join1
          ,b.Join2
          ,b.Join3
    from joined as a
    left join Assumptions as b
    on a.Business_Line = b.Business_Line;
    quit;
    
    options nocenter; ods listing;
    proc print data=joined2;
    run;
    

    结果显示缺少值

           Business_
    Obs      Line       Join1    Join2    Join3
    
     1     Retail         10       10       10
     2     Retail          .        .        .
     3     Retail          .        .        .
     4     Business       20       10        5
     5     Business        .        .        .