If statement sas如果没有观察到,则停止执行
知道为什么这个停止执行代码不起作用吗? 表1中没有观察到,但proc print仍在运行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
%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取消代码>此代码像黄金一样工作!