Sql 左连接并合并多个变量
我有3个数据集:Sql 左连接并合并多个变量,sql,sas,Sql,Sas,我有3个数据集: A包含变量期间、地区、城市 B包含变量期间、城市、销售1、销售2、销售3 C包含变量期间、地区、销售1、销售2、销售3 样本数据集包括: **A:** Period City Region 1 A North 2 B South 3 C East **B:** Period City Sales1 Sales2 Sales3
包含变量期间、地区、城市A
包含变量期间、城市、销售1、销售2、销售3B
包含变量期间、地区、销售1、销售2、销售3C
**A:**
Period City Region
1 A North
2 B South
3 C East
**B:**
Period City Sales1 Sales2 Sales3
1 A 12 13 14
2 B 1 2 3
**C:**
Period Region Sales1 Sales2 Sales3
1 North 6 7 8
2 South 3 2 5
Sales1
、Sales2
和Sales3
是B
和C
的相同变量
我的目标是将数据集B
和C
左连接到A
,以获得所需的销售信息sales1
、sales2
和sales3
但是,我只知道如何使用1个变量进行左连接和合并
即
我的问题是,对于接下来的几个变量
sales2
和sales3
?您的查询可以简化为:
proc sql;
create table merged1 as
select A.*,
coalesce (b.sales1, c.sales1) as sales1,
coalesce (b.sales2, c.sales2) as sales2,
coalesce (b.sales3, c.sales3) as sales3
from A
left join B on A.period=B.period and A.city=B.city
left join C on A.period= C.period and A.region=C.region;
quit;
输出:
Period=1 City=A Region=North sales1=12 sales2=13 sales3=14
Period=2 City=B Region=South sales1=1 sales2=2 sales3=3
Period=3 City=C Region=East sales1=. sales2=. sales3=.
另一个选项是使用proc transpose
对所有表进行转置,这样销售额将在行中,城市/地区将在列中
使用的数据:
data A;
input
Period City $ Region $ ;
datalines;
1 A North
2 B South
3 C East
;
run;
data B;
input
Period City $ Sales1 Sales2 Sales3 ;
datalines;
1 A 12 13 14
2 B 1 2 3
;
run;
data C;
input
Period Region $ Sales1 Sales2 Sales3 ;
datalines;
1 North 6 7 8
2 South 3 2 5
;
run;
您的查询可以简化为:
proc sql;
create table merged1 as
select A.*,
coalesce (b.sales1, c.sales1) as sales1,
coalesce (b.sales2, c.sales2) as sales2,
coalesce (b.sales3, c.sales3) as sales3
from A
left join B on A.period=B.period and A.city=B.city
left join C on A.period= C.period and A.region=C.region;
quit;
输出:
Period=1 City=A Region=North sales1=12 sales2=13 sales3=14
Period=2 City=B Region=South sales1=1 sales2=2 sales3=3
Period=3 City=C Region=East sales1=. sales2=. sales3=.
另一个选项是使用proc transpose
对所有表进行转置,这样销售额将在行中,城市/地区将在列中
使用的数据:
data A;
input
Period City $ Region $ ;
datalines;
1 A North
2 B South
3 C East
;
run;
data B;
input
Period City $ Sales1 Sales2 Sales3 ;
datalines;
1 A 12 13 14
2 B 1 2 3
;
run;
data C;
input
Period Region $ Sales1 Sales2 Sales3 ;
datalines;
1 North 6 7 8
2 South 3 2 5
;
run;
sales1
(和sales2
等)列在表B
和C
中的含义是否相同?你能给我们看一些样品数据吗?假设您需要这种逻辑,那么您当前的coalesce()
没有问题。嗨,是的,他们的意思是一样的,我想知道是否有一种快速的方法来为sales2和sales3的其余部分执行合并功能。随着sales变量数量的增加,代码将变得非常长和乏味。请问将这两个sales1
列为单独的列,然后在这两个列上使用coalesce()
有什么意义?您想要实现什么?我试图通过地理位置按粒度级别将销售信息与原始数据集相匹配。如果城市中的第一级粒度无法匹配,那么我会通过区域级匹配采用更聚合的形式。当您说“聚合”时,我感觉您可能应该使用分组方式
,并且您当前的查询没有反映您实际需要的逻辑。也许可以用一些示例数据和输出更新您的问题以使其更清楚。sales1
(和sales2
,等等)列在表B
和C
中的含义是否相同?你能给我们看一些样品数据吗?假设您需要这种逻辑,那么您当前的coalesce()
没有问题。嗨,是的,他们的意思是一样的,我想知道是否有一种快速的方法来为sales2和sales3的其余部分执行合并功能。随着sales变量数量的增加,代码将变得非常长和乏味。请问将这两个sales1
列为单独的列,然后在这两个列上使用coalesce()
有什么意义?您想要实现什么?我试图通过地理位置按粒度级别将销售信息与原始数据集相匹配。如果城市中的第一级粒度无法匹配,那么我会通过区域级匹配采用更聚合的形式。当您说“聚合”时,我感觉您可能应该使用分组方式
,并且您当前的查询没有反映您实际需要的逻辑。也许可以用一些示例数据和输出更新您的问题,使其更清楚。