1

我有两个表我正在做一个完整的外部连接。他们加入了他们共享的变量“accsnnum”。但我有一个问题。accsnnum 仅在两个集合中都存在时打印出来,但我需要它打印出来,不管它是否在两个集合中,因为我正在比较按 accsnum 分组的变量的计数。

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

accsnum   lab_lbcount
  A12         3
  A11         5
  A14         7
  A13         5

还有一个看起来像这样的 rslttable(只有这 2 个变量):

accsnum    rslt_lbcount
  A15          5
  A12          2
  A14          7
  A16          3

我使用以下代码将这两者结合起来:

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;

这将产生下表:

accsnum   lab_lbcount   rslt_lbcount   difference
               5             .             .
  A12          3             2             1
               5             .             .
  A14          7             7             0
               .             5             .
               .             3             .

请注意,它只打印出两个表连接位置的 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             .     

甚至这样的事情也可以:

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             .

任何帮助是极大的赞赏。

编辑:我在 SAS 环境中编写 SQL 代码,以防不清楚。但这对代码应该没有什么影响。再次感谢!

4

1 回答 1

5

合并这两个 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;
于 2013-07-16T15:18:29.730 回答