Merge 在SAS中使用proc SQL合并所有可能匹配变量的3个表
我在SAS中有3个数据集: 主楼1Merge 在SAS中使用proc SQL合并所有可能匹配变量的3个表,merge,sas,multiple-tables,proc-sql,Merge,Sas,Multiple Tables,Proc Sql,我在SAS中有3个数据集: 主楼1 ID Rep Dose Response 1 2 34 567 1 1 45 756 2 1 35 456 3 1 56 345 主要功能2 ID Rep Hour Day 1 1 89 157 2 1 62 365 3 1 12 689 主要功能3 ID Rep Town City 1 1 3268 151643 2 1 2574 1
ID Rep Dose Response
1 2 34 567
1 1 45 756
2 1 35 456
3 1 56 345
主要功能2
ID Rep Hour Day
1 1 89 157
2 1 62 365
3 1 12 689
主要功能3
ID Rep Town City
1 1 3268 151643
2 1 2574 165435
3 1 1254 135435
2 2 1563 135435
在将表导入SAS之后,我目前有以下proc SQL代码(我非常抱歉它的可怕)来合并表,以便每个ID和Rep包含所有相关信息。我似乎无法有效地合并所有3个表,因为main_1没有包括所有可能的ID和Rep组合(实际上没有一个包括):
生成了以下内容,但缺少1个观察值:
ID Rep Dose Response Hour Day Town City
1 1 45 756 89 157 3268 151643
1 2 34 567 - - - -
2 1 35 456 62 365 2574 165435
3 1 56 345 12 689 1254 135435
我需要合并所有可能的匹配项,以实现以下目标:
ID Rep Dose Response Hour Day Town City
1 1 45 756 89 157 3268 151643
1 2 34 567 - - - -
2 1 35 456 62 365 2574 165435
2 2 - - - - 1563 135435
3 1 56 345 12 689 1254 135435
如果上面的代码是完全错误的方法,我很乐意学习其他SQL替代方案
非常感谢。您需要使用
完全连接
而不是左连接
试试这个:
PROC SQL;
create table merged_sql_2 as
select coalesce(a.id,b.id,c.id) as id,
coalesce(a.rep,b.rep,c.rep) as rep,
a.dose,
a.response,
B.hour,
B.day,
C.Town,
C.City
from main_1 as A
FULL JOIN main_2 as B
on A.ID = B.ID
and A.Rep = B.Rep
FULL JOIN main_3 as C
on A.ID = C.ID
and A.Rep = C.Rep;
QUIT;
COALESCE()
函数从列表中选择第一个非空值。这使您可以保留任何参与行的表中的键。使用完全自然联接也可以:
proc sql;
create table new as
select rep, dose, response, hour, day, town, city from
Main_1 natural full join Main_2 natural full join Main_3
;
quit;
proc sql;
create table new as
select rep, dose, response, hour, day, town, city from
Main_1 natural full join Main_2 natural full join Main_3
;
quit;