我有下面的宏PARAMETERS,它将值分配给五个变量并创建表MD_WRK.SUB_ID。我的问题是宏中的代码工作正常,直到我把它放在宏中。现在没有填充变量,并且没有执行用于创建表的PROC SQL。当我删除"%MACRO" PROC SQL颜色更改以指示它是正确的,但在宏中它们是灰色的。我无法理解为什么宏中的代码无效。
%MACRO PARAMETERS;
%GLOBAL FDMVAR1 FDMVAR2 UPBOUND LOBOUND GROUPVAR;
%LET FDMVAR1 ='31Mar2017:0:0:0'dt; /* Start Date */
%LET FDMVAR2 = '30Apr2017:0:0:0'dt; /* End Date */
%LET UPBOUND = .01;
%LET LOBOUND = -.01;
%LET GROUPVAR = 1;
PROC SQL;
CREATE TABLE MD_WRK.SUB_ID
(SUBSYS_ID char(6));
INSERT INTO MD_WRK.SUB_ID
VALUES('CBS')
VALUES('CDS')
VALUES('DDA')
VALUES('IMCOR')
VALUES('ODL')
VALUES('OEC')
VALUES('OEC2')
VALUES('SAV')
VALUES('PWRCDS')
VALUES('SMARTY')
VALUES('MRKTLN')
;
QUIT;
%MEND PARAMETERS;
答案 0 :(得分:0)
当你说'#34; PROC SQL颜色改变"如果您指的是企业指南中显示的代码颜色或其他为您自动进行语法着色的客户端,我会忽略着色。语法着色中有一些小故障,但请注意,这些颜色不是代码的一部分,因此即使代码着色表明某些内容可能有误,只要语法正确,它就会正常执行。
如果打开options mprint;
并调用宏,则日志应显示数据集MD_WRK.SUB_ID已创建(或提供错误消息,说明未创建的原因)。
正如@Reeza所提到的,您创建的宏变量可能被创建为本地宏变量,因此它们不会存在于宏之外。如果要在宏内部将它们声明为%global,它们将存在于宏之外,因为它们将存储在全局符号表中。但通常有更好的方法,然后依靠全球宏观变量。