Proc SQL中的错误处理(如try Catch)

时间:2018-03-13 06:04:46

标签: sas

我这样做

libname DZY 'Path';
Proc sql;
select * from DZ.some_table;
run; 

这里我必须添加一个错误处理,就像在select语句中出错或在块中我必须将错误消息写入文件夹中的单独文本文件。 这就是我试过的

%macro sortclass;
 Proc sql;
    select * from DZ.some_table;
    run; 
%if &SQLRC gt 0 %then %goto error;
%error:
proc export data=""
run;

%exit:
%mend; 
%sortclass;

我正在尝试捕捉错误处理..,如何以有效的方式做到这一点。在此先感谢

1 个答案:

答案 0 :(得分:0)

Base SAS没有try / catch机制,因此宏生成代码导致的错误可能会导致尝试外部记录消息时出现问题。

filename logfile 'mysolution.log' mod;

%macro mylogger(message);
  * may fail due to apriori errors;
  data _null_;
    file log;
    put "%superq(message)";
  run;
  * a more advanced version would instead use macro `%sysfunc'd` invocations of
  * `FOPEN FPUT FWRITE FWRITE` to append to a custom external log file;
%mend;

%macro mymacro(...);
   ... some SQL statement(s) ...
   %if &SYSRC > 0 %then %do;
     %mylogger(Failer at step 1); 
     %return;
   %end;
   ... some more SQL statement(s) ...       
   %if &SYSRC > 0 %then %do;
     %mylogger(Failer at step 2); 
     %return;
   %end;
%mend;

注意:您还可以从使用SAS工作区会话的java或.net代码提交SAS代码 - 搜索SAS集成对象模型(iom)以获取更多信息。这样的解决方案将为try / catch / throw和高级日志记录模型提供丰富的环境。