0

SAS プログラムを条件付きで終了しようとしています。インターネットの隅々では、コードをマクロ ラッパーにカプセル化するよう提案されていますが、これを行うと、コードが SAS によって「認識」されなくなったように見えます (キーワードは青色ではなくなりました)。今のところどこにも書かれていませんが、この機能は Enterprise Guide 5.1 と互換性がないのではないかと思います。

%macro wrapper;
PROC SQL;
    All this is just grey text, to include the PROC SQL and QUIT that should be blue
;QUIT;
%mend wrapper;

最終的に、コードにこのようなものを入れたい

IF date1 ^= date2 THEN ABORT(the entire program if possible)

%IF %THEN %GOTO を使用してみましたが、プログラム全体がマクロ ラッパー内にない限り機能しません。

(IF 条件を使用して DATA ステップ内で中止しようとしましたが、プログラムではなくそのコード ブロックを中止するだけです。)

これを明確に表現できたことを願っています。そこに役立つSASウィザードはありますか? ここでの主な目標に適用できる、考えもしなかった代替方法はありますか?

みんな、ありがとう!

4

3 に答える 3

2

エディターは、SAS の実行から完全に独立しています。エディターに表示される色分けは、エディターがコードを理解しようとする試みにすぎません。コードが機能するかどうかには影響しません。

于 2015-09-09T12:17:23.327 に答える
1

このソリューションは、date1 と date2 の値をマクロ変数に保存したことを前提としています。サポートが必要な場合はお知らせください。この回答を更新します。

ステートメントを使用する%abort cancel;ことは、現在実行中のプログラムを条件付きで中止する私のお気に入りの方法です。SQL コードの前にテストを実行するだけです。実行がそこまで進まない場合は、すべてのコードをマクロでラップする必要はありません。

%macro exit_if_dates_dont_match;
  %if &date1 ^= &date2 %then %do;
    %abort cancel;
  %end;
%mend;
%exit_if_dates_dont_match;
于 2015-09-09T15:40:56.107 に答える