【问题标题】:SAS Macro RSUBMIT UNION querySAS 宏 RSUBMIT UNION 查询
【发布时间】:2016-05-03 00:22:30
【问题描述】:

根据有关 UNION 查询与 IN/OR 方法的一些信息,我一直在修改一项大型工作。通过将 IN 语句移动到 UNION 查询中,我已经能够很好地减少我的 RSUBMIT 查询,因为通过一个查询的前一个 IN 语句需要 35 分钟,而 8 个联合查询需要 9 分钟。

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

下图是宏的sn-p(单独查询),马上就看到我的问题了。

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

我运行代码部分只是为了查看,实际上它确实运行...但仅适用于由宏的第一个参数表示的第一个查询(在本例中为“IDRPR”字符串) ,则无法执行后续参数/查询的所有后续宏调用。

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

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

【问题讨论】:

    标签: sql macros sas union


    【解决方案1】:

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

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

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

    【讨论】:

    • 你的怀疑是正确的,一旦我删除了';'它作为一个巨大的查询运行(执行所有参数)....谢谢!
    【解决方案2】:

    您不能使用关键字UNION 启动 SQL 语句。去掉多余的分号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-26
      • 2016-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多