Могу ли я остановить отправленные заявления по первой ошибке? - PullRequest
0 голосов
/ 18 января 2020

Просто для отладки: есть ли способ прекратить выполнение серии представленных операторов для первой ошибки?

Допустим, у меня есть три шага кода, где во втором операторе есть ошибка. Предположим, что я запускаю их все одновременно в окне SAS. Затем я ожидаю, что SAS успешно выполнит первое предложение и перестанет работать из-за ошибки, обнаруженной во втором предложении. Тогда я могу легко go там исправить это.

Но на самом деле происходит то, что SAS пытается выполнить все три шага (т. Е. 1-й, 2-й (с ошибкой, хотя) и 3-й). Надеюсь, что для этого есть решение.

Два замечания:

  1. Я обнаружил, что приведенный ниже код может помочь, но на самом деле это не так. В противном случае, пожалуйста, просветите меня.
options syntaxcheck dmssynchk;
Я не хочу использовать опцию SAS, errorabend, потому что она отключает сам сеанс SAS. Я просто хочу, чтобы мой SAS остановил «представленный код» и решил проблему.

Заранее спасибо.

1 Ответ

0 голосов
/ 18 января 2020

Существует широко используемый макрос, называемый %runquit, который позволяет это ... Не уверен, откуда он исходит, но здесь он идет:

%macro runquit;
  ; run; quit;
  %if &syserr. ne 0 %then %do;
     %abort cancel;
  %end;
%mend runquit;

proc sort data=asdasd;
 by _all_;
%runquit;

data abc;
 a = 1;
 b = 2;
 c = 3;
%runquit;

Недостатком является то, что вы должны заменить любой * Оператор 1005 * или quit; с вызовом %runquit, что делает код менее привлекательным.

Соответствующий вопрос StackOverflow можно найти здесь .

Также см. это обсуждение для других решений.

...