SAS 中的宏变量未被正确解析
macro variable not being resolved correctly in SAS
我有一个这样的 SAS 宏:
%macro test;
proc sql;
SELECT count(*) INTO:Nbr_Obs from table1;
quit;
%put observations=&Nbr_Obs;
%if &Nbr_Obs=0 %then %do;
proc sql;
drop table table1 ;
quit;
%end;
%mend;
%put 语句均未出现在日志中,并且 'if' 条件始终评估为真。我该如何解决?
编辑:这是我在日志中看到的:
MPRINT(TEST): proc sql;
MPRINT(TEST): SELECT count(*) INTO:Nbr_Obs from TABLE1;
MPRINT(TEST): quit;
observations=
...
...
然后显示SQL正在执行。所以看起来 PU T 语句在 SQL?
之前执行
如果您的代码之前失败,SAS 会设置 SYNTAXCHECK
选项和 OBS=0
。这意味着会读取 SQL 语句并检查其语法,但不会 实际上 执行。这就是它们出现在 MPRINT
输出中的原因。
使用以下方法重置系统选项:
OPTIONS NOSYNTAXCHECK OBS=MAX;
然后重试。
从使用 INTO 子句创建的宏变量中去除前导和尾随空白始终是最佳做法,这是不正确比较的原因。请修改如下,
%macro test;
proc sql;
SELECT count(*) INTO:Nbr_Obs
from table1;
quit;
%let Nbr_Obs=&Nbr_Obs; * Strips blanks;
%put observations=&Nbr_Obs;
%if &Nbr_Obs=0 %then %do;
proc sql;
drop table table1 ;
quit;
%end;
%mend;
我有一个这样的 SAS 宏:
%macro test;
proc sql;
SELECT count(*) INTO:Nbr_Obs from table1;
quit;
%put observations=&Nbr_Obs;
%if &Nbr_Obs=0 %then %do;
proc sql;
drop table table1 ;
quit;
%end;
%mend;
%put 语句均未出现在日志中,并且 'if' 条件始终评估为真。我该如何解决?
编辑:这是我在日志中看到的:
MPRINT(TEST): proc sql;
MPRINT(TEST): SELECT count(*) INTO:Nbr_Obs from TABLE1;
MPRINT(TEST): quit;
observations=
...
...
然后显示SQL正在执行。所以看起来 PU T 语句在 SQL?
之前执行如果您的代码之前失败,SAS 会设置 SYNTAXCHECK
选项和 OBS=0
。这意味着会读取 SQL 语句并检查其语法,但不会 实际上 执行。这就是它们出现在 MPRINT
输出中的原因。
使用以下方法重置系统选项:
OPTIONS NOSYNTAXCHECK OBS=MAX;
然后重试。
从使用 INTO 子句创建的宏变量中去除前导和尾随空白始终是最佳做法,这是不正确比较的原因。请修改如下,
%macro test;
proc sql;
SELECT count(*) INTO:Nbr_Obs
from table1;
quit;
%let Nbr_Obs=&Nbr_Obs; * Strips blanks;
%put observations=&Nbr_Obs;
%if &Nbr_Obs=0 %then %do;
proc sql;
drop table table1 ;
quit;
%end;
%mend;