2013-08-16 8 views
9

Szybkie pytanieWykonanie zatrzymania SAS

Czy istnieje metoda jedno-liniowa (lub raczej krótka) polegająca na anulowaniu wykonywania kolejnych instrukcji SAS z otoczeniem okna.

Wiem, że są one methods Wiem, ale stają się męczące, zwłaszcza w dużych programach z dużą ilością komentarzy. Próbowałem instrukcji ABORT i STOP, ale zamykają one środowisko okiennicze, ale wszystko, czego chcę, to zatrzymanie egzekucji w określonym punkcie i przejście do mojej wesołej drogi.

Dzięki

Odpowiedz

7

To jest coś, co pojawia się na SAS-L tak często. Odpowiedź jest taka, że ​​w dużej mierze zależy to od tego, co robisz.

Metoda run cancel jest prawdopodobnie najlepsza, jeśli masz nadzieję na przerwanie wykonywania z powodu błędu. Na szczycie programie zrobić:

%let cancel =; *or any macro variable name, but cancel is most logical; 

Następnie w każdym prowadzonym kroku masz:

data whatever; 
... do stuff ...; 
run &cancel; 

I za każdym razem, gdy jakiś potencjalny błąd, należy sprawdzić stan błędu, a następnie, jeśli natrafi , %let cancel=cancel; i jesteś dobry.

Jeśli używasz makr, możesz płynnie opuścić makro z numerem %abort, o ile nie używasz żadnych opcji lub używasz tylko cancel. W zależności od tego, co robisz, możesz skonfigurować swój kod tak, aby działał w makrze (lub makrach) i używał tej opcji (chociaż z wadą utraty przejrzystości logarytmicznej).

Na koniec, jeśli interesuje Cię możliwość uruchomienia podzbioru kodu, zalecamy napisanie kodu w wielu programach SAS dla bitów, które chcesz uruchomić oddzielnie, a następnie użycie %include z programu głównego do zgrupuj je wszystkie razem ze wszystkimi zmiennymi makr, które mogą wymagać zestawu, które są współużytkowane. Jest to podobne do tego, jak w EG można budować wiele mniejszych programów, a następnie grupować je za pomocą diagramu procesu.

+2

FYI 'proc sql' ma również podobną opcję o nazwie' noexec'. Pełna składnia to 'proc sql noexec; .... robić coś.... ; zrezygnować. Zawartość procesu nie zostanie wykonana. Możesz użyć tej samej techniki, którą Joe opisał powyżej również. –

1

Użyłem następujących

%abort cancel; 
+0

To zadziałało dla mnie. dane _ null _; jeśli & sitrouv> 0 wtedy zadzwonić execute ( \t "noprint proc sql; \t \t ... sqlquery ...; \t" \t); \t else abort cancel; uruchomić; –

Powiązane problemy