如何进行完全外部联接,无论它们是否匹配,都将填充其联接标准

Mik*_*e L 1 sql join sas full-outer-join

我有两个表我正在进行全外连接.他们加入变量"accsnnum",他们都共享.但我有一个问题.只有当两个集合中都存在时,才会打印出来,但我需要它才能打印出来,无论它是否都在两者中,因为我正在比较按accsnum分组的变量的计数.

为了说明,我有一个看起来像这样的labtable(只有这两个变量):

accsnum   lab_lbcount
  A12         3
  A11         5
  A14         7
  A13         5
Run Code Online (Sandbox Code Playgroud)

并且看起来像这样的rslttable(只有这两个变量):

accsnum    rslt_lbcount
  A15          5
  A12          2
  A14          7
  A16          3
Run Code Online (Sandbox Code Playgroud)

我使用以下代码组合这两个:

proc sql;
create table both as
select Labtable.accsnnum label="Lab_accsnnum", Rslttable.accsnnum 
  label="Rslt_accsnnum", Labtable.Lab_lbcount label="Lab_lbtestcd_count", 
  Rslttable.Rslt_lbcount label="Rslt_lbtestcd_count", 
  Lab_lbcount-Rslt_lbcount as difference
from work.Labtable
full outer join work.Rslttable 
on Labtable.accsnnum = Rslttable.accsnnum;
quit;
Run Code Online (Sandbox Code Playgroud)

这会产生下表:

accsnum   lab_lbcount   rslt_lbcount   difference
               5             .             .
  A12          3             2             1
               5             .             .
  A14          7             7             0
               .             5             .
               .             3             .
Run Code Online (Sandbox Code Playgroud)

请注意,它仅打印出两个表连接的位置的accsnum,但包括"lb_count"和"rslt_count"的计数.我需要让它打印出该变量中的accsnum,即使它不在两者中,或者我需要通过accsnum想出一种方法来加入,但仍然打印出两个表中每个表的accsum.基本上,我希望输出看起来像这样:

accsnum   lab_lbcount   rslt_lbcount    difference
  A11          5             .             .
  A12          3             2             1
  A13          5             .             .
  A14          7             7             0
  A15          .             5             .
  A16          .             3             .     
Run Code Online (Sandbox Code Playgroud)

或者甚至这样的事情都可以:

accsnum    lab_accsum     rslt_accsum   lab_lbcount   rslt_lbcount  difference
              A11            .               5             .             .
  A12         A12           A12              3             2             1
              A13            .               5             .             .
  A14         A14           A14              7             7             0
               .            A15              .             5             .
               .            A16              .             3             .
Run Code Online (Sandbox Code Playgroud)

任何帮助是极大的赞赏.

编辑:我在SAS环境中做SQL代码,如果不清楚的话.但这应该对代码几乎没有影响.再次感谢!

Joe*_*Joe 5

COALESCE两个accsnnums.此函数采用第一个非缺失值,因此如果labtable.accsnnum可用,则需要该值; 否则需要rslttable.accsnnum.

proc sql;
create table both as
select coalesce(labtable.accsnnum,rslttable.accsnnum) as accsnnum label="Access Number", Labtable.Lab_lbcount label="Lab_lbtestcd_count", 
  Rslttable.Rslt_lbcount label="Rslt_lbtestcd_count", 
  Lab_lbcount-Rslt_lbcount as difference
from work.Labtable
full outer join work.Rslttable 
on Labtable.accsnnum = Rslttable.accsnnum;
quit;
Run Code Online (Sandbox Code Playgroud)