【发布时间】:2017-08-20 17:58:15
【问题描述】:
我在宏中的条件逻辑和分配库时遇到问题...
我的问题: 我在分配库之前执行了条件宏逻辑 (%IF/%THEN %DO) 语句,该逻辑基于库中的数据集是否存在。
我仍在学习如何使用 SAS 中的宏,但不确定如何确保首先分配我的库...
我的程序看起来像这样:
%MACRO MyProg();
SIGNON...
RSUBMIT....
LIBNAME TEMP "My.Qualifiers.To.Location" Disp=shr;
%IF %SYSFUNC(EXIST(TEMP.FILE)) %THEN %DO;
....some datasteps....
%END;
ENDRSUBMIT;
SIGNOFF;
%MEND;
%MyProg();
从日志中可以看出%IF &SYSFUNC(EXIST(TEMP.FILE)) %THEN %DO;是假的,然后再分配库。
如何确保始终先执行 Libname 语句?
【问题讨论】:
-
我没有关注。如所写,libname 语句应始终在 %DO 块中的任何代码之前执行。也许发布您的日志。如果您有 MLOGIC 选项,则日志消息可能会令人困惑。如果您设置选项 MPRINT NOSYMBOLGEN NOMLOGIC SAS 语句的顺序应该是明确的。
-
@Quentin 宏语法总是在任何 SAS 代码之前解决/执行......我认为这确实是 OP 的问题所在(结合 RSUBMIT 固有的复杂性)。