【问题标题】:how to perform a UNION where some tables are empty如何在某些表为空的情况下执行 UNION
【发布时间】:2021-05-25 09:12:16
【问题描述】:

我希望在 3 个表之间执行 UNION,我知道其中 1 个表没有值(空表)。 使用 SAS PROC SQL 时出现错误: 错误:表 WORK.B 没有任何列。

我的代码:

select *
from work.A
union 
select *
from work.B
union 
select *
from work.C

据我了解,我需要使用 EXIST,以便仅对现有表进行 UNION。

【问题讨论】:

  • 错误不是表 B 为空,而是表 WORK.B 没有任何列。我不确定 SAS,但对于联合,您应该从所有表中以相同的顺序和相同的数据类型选择相同数量的列。所以如果你使用 * 那么 A 和 B 的表结构应该是相同的
  • 联合一个空表有什么意义呢?
  • @metadata 所有表都有相同的列数和相同的类型和顺序,问题是因为表 B 是空的。
  • 执行SQL时,不知道表是否为空。
  • 尝试在 select 中使用列名而不是 *

标签: sql sas union


【解决方案1】:

日志错误消息还指出PROC SQL requires each of its tables to have at least 1 column.

您可以使用 DATA step SET 语句堆叠(联合)您的数据,然后使用 SORT 消除重复项。

例子:

data x;
  set sashelp.class (where=(name=:'A'));

data y;
  stop;

data z;
  retain age weight name height;
  set sashelp.class (where=(name in: ('A', 'J')));
run;

data want;
  set x y z;
run;

proc sort data=want nodupkey;
  by _all_;
run;

【讨论】:

  • 由于某种原因,SQL 不允许在“未创建”表时使用 UNION 来执行任何操作。但是在数据步骤中使用 SET 语句涵盖了它!谢谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多