SAS宏RSUBMIT UNION查询

时间:2016-05-03 00:22:31

标签: sql macros sas union

我根据有关UNION查询与IN / OR方法的一些信息重新编写了大量工作。通过将IN语句移入UNION查询,我能够很好地减少我的RSUBMIT查询,因为前一个IN语句通过一个查询花了35分钟,而8个联合查询花了9分钟。

由于其中一些IN语句涉及越来越多的值,我尝试使用宏工具来缩短代码,但我遇到了问题。

下面的图片是宏的一个片段(个别查询),您将立即看到我的问题。

enter image description here

*宏正在RSUBMIT中编译,所以我们应该很好......#但明显的红色文本告诉我这是基于UNION语句的某种非法语法。

我运行代码部分只是为了查看,实际上它确实运行...但仅适用于由宏的第一个参数表示的FIRST查询(在这种情况下是' IDRPR& #39;字符串),然后无法执行后续参数/查询的所有后续宏调用。

我确实试图包装每个" UNION"在一对括号中的语句,以促进法律语法。乍一看,似乎它可能正常运行,因为我在增强编辑器中没有红色文本 -

enter image description here

但是出现与上面相同的问题......第一次宏调用只执行一次。我在这里缺少什么,或者如何以更好,更有效的方式执行?

2 个答案:

答案 0 :(得分:1)

SAS中的语法高亮显示是一个有用的指南,但有些情况(尤其是宏代码)是错误的。测试代码是否有效的最佳方法是运行它。

我不知道DB2,但我怀疑原始代码中的一个问题是每个宏调用后的分号。

在宏调用后尝试编码%OPEN_IDR('IDR_PR')而不使用分号。分号可能会破坏您的DB2查询语法。

答案 1 :(得分:1)

您无法使用关键字UNION启动SQL语句。去除外来的冒号。