If statement sas如果没有观察到,则停止执行

If statement sas如果没有观察到,则停止执行,if-statement,sas,If Statement,Sas,知道为什么这个停止执行代码不起作用吗? 表1中没有观察到,但proc print仍在运行 %macro execute (inputdata=work.table1); data _null_; if 0 then set &inputdata. nobs=n; call symputx('totobs',n); stop; run; %if &totobs. = 0 %then %put exit; %else %do; %put execute further; %en

知道为什么这个停止执行代码不起作用吗? 表1中没有观察到,但proc print仍在运行

%macro execute (inputdata=work.table1);

data _null_;
if 0 then set &inputdata. nobs=n;
call symputx('totobs',n);
stop;
run;


%if &totobs. = 0 %then %put exit;
%else %do;
%put execute further;
%end;
%mend execute;
%execute(inputdata=work.table1)

proc print data= work.table1;
run;

您的
Proc打印
发生在宏执行之后,因此没有任何东西阻止提交Proc。
%put exit
只会在日志窗口中显示来自宏系统的消息

有些棘手的事情你可以做,但不应该做


  • 绝对不是这样:让宏发出源代码
    *当没有观察时。分号asterik(
    ;*
    )将导致一个空语句(或完成一个打开的语句),然后在源代码(由提交处理器处理)中启动一个以下一个分号结尾的
    %if&totobs.=0%然后%str(;*)
    当totobs为零时,提交处理器将看到源代码
    *proc print data=work.table1
  • 可能是这样的:停止当前提交的源代码的所有进一步执行。在宏中,
    %abort cancel
    将执行此操作。

    %if&totobs.=0%然后%abort取消

最好的答案是“您希望发生什么?”

您没有任何代码可以阻止PROC PRINT运行。当然,如果没有任何观察,为什么您会在意,因为如果没有输入,PROC PRINT将不会生成任何输出。
%if&totobs.=0%然后%abort取消此代码像黄金一样工作!