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;