В качестве дополнения к ответу Rwill:
Если вы используете хранимый процесс (STP), также неплохо не показывать журнал пользователям при возникновении ошибки и удалять кнопку «Показать журнал SAS».
Чего можно достичь с помощью этого
%macro checkcc;
options obs=max no$syntaxcheck;
%if (&syscc gt 4) %then
%do;
data _null_;
file _webout;
put "<h3>Sorry, your request was not processed successfully.<h3>";
rc = stpsrvset('program error', 0);
run;
%end;
%let syscc=0;
%mend checkcc;
%checkcc;
источник: http://support.sas.com/kb/16/225.html
А вот расширенная версия, которую я сделал, чтобы показать ошибку в формате json.
%macro checkErrors;
options obs=max no$syntaxcheck;
%let old = %sysfunc(stpsrv_header(Content-type, application/json%str(;) charset=utf-8));
%put &=syscc; %put &=syserr; %put &=sysrc; %put &=syswarningtext; %put &=syserrortext;
%if (&syscc gt 4) %then %do;
data _null_;
file _webout;
put '{';
put ' "success":"false"';
put ' ,"message":"' "&syserrortext" '"';
put ' ,"syscc":"' "&syscc" '"';
put '}';
rc = stpsrvset('program error', 0);
run;
%end;
%let syscc=0;
%mend checkErrors;
%checkErrors;
и HTML-версия:
%macro checkErrors_HTML;
options obs=max no$syntaxcheck;
%if (&syscc gt 4) %then %do;
data _null_;
file _webout;
put '<!doctype html> ';
put '<html> ';
put ' <head> ';
put ' <title>Error</title> ';
put ' </head> ';
put ' <body> ';
put ' <h1>An Error Occured</h1>';
put ' <p>' "&syserrortext" '</>';
put ' </body>';
put '</html>';
rc = stpsrvset('program error', 0);
run;
%end;
%let syscc=0;
%mend checkErrors_HTML;
%checkErrors_HTML;