首先,我是SAS开发人员。因此,在这种情况下,可以使用SAS Datastep或PROC SQL(普通SQL)。
我目前有2个表,其结构如下: ca_no是唯一的
Table A(Master/Primary)
ca_no ca_name assetnm power period
1 ali house 100 201801
2 abu plane 200 201801
3 abu plane 300 201802
4 zara car 400 201801
7 zara car 500 201805
8 zara car 600 201806
Table B(Secondary)
ca_no ca_name assetnm period kickoffdate carbrand
1 ali house 201801 1-1-2018 BMW
2 abu plane 201801 2-1-2018 Audi
5 bernard tank 201802 3-1-2018 Merc
6 chris NA 201803 5-2-2018 Ford
我想合并那些可以匹配ca_no的内容。否则,请为没有匹配的ca_no(例如表B中的5和6)的那些连接并创建新记录。
sample output:
Table Result
ca_no ca_name assetnm power period kickoffdate carbrand
1 ali house 100 201801 1-1-2018 BMW
2 abu plane 200 201801 2-1-2018 Audi
3 abu plane 300 201802 3-1-2018 Audi
4 zara car 400 201801
5 bernard tank 201802 3-1-2018 Merc
6 chris NA 201803 5-2-2018 Ford
7 zara car 500 201805
8 zara car 600 201806
有办法吗?
分别以某种方式类似于UNION和JOIN。
答案 0 :(得分:2)
这可以通过简单的数据步骤完成。在不失礼貌的情况下,对于SAS开发人员来说,这似乎是一个非常基本的问题。我认为您目前对该软件还不熟悉。
data A;
input ca_no ca_name $ assetnm $ power period;
datalines;
1 ali house 100 201801
2 abu plane 200 201801
3 abu plane 300 201802
4 zara car 400 201801
7 zara car 500 201805
8 zara car 600 201806
;
run;
data B;
input ca_no ca_name $ assetnm $ period kickoffdate :ddmmyy8. carbrand $;
format kickoffdate :ddmmyy8.;
datalines;
1 ali house 201801 1-1-2018 BMW
2 abu plane 201801 2-1-2018 Audi
5 bernard tank 201802 3-1-2018 Merc
6 chris NA 201803 5-2-2018 Ford
;
run;
data want;
merge A (in=a) B (in=b);
by ca_no;
if a or b;
run;
答案 1 :(得分:1)
您可以使用完全外部联接和 coalesce 函数来尝试使用
select coalesce(a.ca_no,b.ca_no), coalesce(a.ca_name,b.ca_name),
coalesce(a.assetnm,b.assetnm),a.power,
coalesce(a.period,b.period), b.kickoffdate,b.carbrand
from Table_A a full join Table_B b on a.ca_no=b.ca_no;
答案 2 :(得分:0)
您可以使用带有一些空行的联合:
选择A.ca_no,A.ca_name,A.assetnm,A.power,A.period, B.kickoffdate,B.carbrand从A.ca_no上的左联接B = B.ca_no <- 此查询将为您提供所有A个匹配B个结果。
选择B.ca_no,B.ca_name,B.assetnm,''AS电源,B.period, B.kickoffdate,B.carbrand从B左加入A B.ca_no = A.ca_no A.ca_no IS NULL <-此查询使您获得B不在A中的结果。
现在,您只需要在一个UNION上转换此查询,在第二个查询之前添加UNION。
如果需要对结果进行排序,则可以在嵌套查询中进行处理,并在以后进行简短处理。示例:
选择*从(
选择A.ca_no,A.ca_name,A.assetnm,A.power,A.period, B.kickoffdate,B.carbrand来自A.ca_no = B.ca_no的左联接B
UNION SELECT B.ca_no,B.ca_name,B.assetnm,''AS power,B.period, B.kickoffdate,B.carbrand从B左加入A B.ca_no = A.ca_no A.ca_no IS NULL
)AS DerivedTbl1 OR BY BY ca_no
我在编写查询时没有进行测试,也许它们可能是拼写错误,但这就是您可以满足需求的方式。