Sql 如何在不多次复制和粘贴同一正文的情况下连接大量表?

Sql 如何在不多次复制和粘贴同一正文的情况下连接大量表?,sql,sas,Sql,Sas,我正在使用procsql查询编写一个SAS代码,该查询将调用总计 32448张以上的表格。我试图避免复制和粘贴相同的代码30K次以上。我正在PROC SQL中编写代码,因为SAS对我来说是新的,但我将在SAS或SQL中接受答案 有什么建议或捷径吗 谢谢,如果您有32448个表,那么您的数据模型就有问题了。很有可能,这些只是一个表的重复,被一些因素分割——邮政编码、日期等等。它们应该存储在一个表中 你还有一个问题。根据报告: FROM子句本身可以包含一个采用 可选的表别名。这种类型的嵌套查询表达式

我正在使用
procsql
查询编写一个SAS代码,该查询将调用总计 32448张以上的表格。我试图避免复制和粘贴相同的代码30K次以上。我正在
PROC SQL
中编写代码,因为SAS对我来说是新的,但我将在SAS或
SQL
中接受答案

有什么建议或捷径吗


谢谢,

如果您有32448个表,那么您的数据模型就有问题了。很有可能,这些只是一个表的重复,被一些因素分割——邮政编码、日期等等。它们应该存储在一个表中

你还有一个问题。根据报告:

FROM子句本身可以包含一个采用 可选的表别名。这种类型的嵌套查询表达式称为 直列视图。内嵌视图是任何查询表达式 在CREATEVIEW语句中有效。PROC-SQL可以支持多种级别的 嵌套,但在任何一个查询中限制为256个表。这个 256表限制包括可能有助于 在FROM子句中指定的视图


因此,使用proc-sql可能无法实现您想要的功能。

如果没有更多详细信息,很难提供任何确切的答案。但一般来说,在SAS中,使用普通SAS代码而不是SQL编写代码要容易得多

假设单词“table”是指SAS数据集,并进一步假设它们都在同一个库(目录/文件夹)中,并且共享一个唯一的公共前缀(例如
week
),则组合步骤可以简单如下:

libname mylib 'some folder name' ;
data want;
  set mylib.week: ;
run;

@GordonLinoff,可能是因为这个问题读起来像是一个代码编写请求:我将用SAS或SQL回答。OP不会发布任何代码尝试或更改。这是一个涉及面太广的问题,即使是在SAS或SQL中也有多种方法可以做到这一点。我们欢迎新的SO成员,但他们应该花时间学习。@Parfait。否决票只会阻止某人使用该网站。提供所需或预期的简单解释。此外,我根本不明白要求一条捷径是如何成为一个“代码编写”项目的。这些表是如何命名的?名称中是否存在可以构造名称的模式?或者您需要从磁盘中发现它们吗?如果你需要发现它们,有没有一种方法可以告诉你哪些是一起去的?也许是基于一个共同的前缀。显示您当前尝试使用什么方法组合什么类型的联接?自然连接?有钥匙吗?你真的加入了工会而没有加入吗?你是在压平雪花数据模型吗?确实有一些方法可以有效地做到这一点,正如戈登在他的回答中指出的,很可能有更好的方法来构建你的整体方法。但无论哪种方式,我认为您最好给出更多的细节,包括一个示例(比如,显示3或4个表,说明您正在做的事情以及代码)。有关如何改进的更多详细信息,请参阅和。
PROC-SQL可以支持多种嵌套级别,
理论上可能是这样。实际上,procsql仅限于两个或三个范围表条目。(SAS或多或少是无模式的,所以除了一个微不足道的两表联接之外,不可能找到最佳计划)@joop。你得跟SAS谈谈。我只是引用文档中的话。我试图附加或连接大约3个在两年多的时间里每周更新的表,因此是30k+SAS表。@dariocampelo。2年内每周生成的3个表约为312个表。这仍然超过了阈值,但你应该提高你的评估技能。您的过程可能是将表复制到主表中,以方便查询、报告和分析。感谢您对256 PROC SQL限制的介绍。我试图附加或连接多个在多年中每周更新的表,因此是2k到30K+SAS表。我不知道是否可以在SAS中创建一个包含所有表名的单独表,并在SAS中使用某种for循环调用它们?