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代码,如果不清楚的话.但这应该对代码几乎没有影响.再次感谢!
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)