2017年8月25日金曜日

「%IF条件」で「NOT IN」が使えない。




以下の記事を読んだ方から質問を頂きました。

「%IF条件」で「IN」を使う。




質問


「%IF」で「^IN」を使ったら、エラーでちゃったんだけど、どうすればいい?

options minoperator mindelimiter=',' ;

%macro TEST( X= );
   %if  &X ^in (1,2)  %then %put NOTE: マクロ変数 X は 1 と 2 じゃない;
%mend;

%TEST( X=3 );

ログ
 ERROR: 数値演算項が必要とされる%EVAL関数または%IF条件に、文字演算項が見つかりました。
        条件: &X ^in (1,2) 
 ERROR: マクロTESTの実行を中止します。

上の例では「マクロ変数 X が 1, 2 以外」という条件を判定したかったわけです。
どうやら、「%IF」では「^IN」とか「NOT IN」みたいな書き方は現在(SAS9.4)対応していないようですね。




解決策


NOT演算子で囲ってあげるだけでOKです。

options minoperator mindelimiter=',' ;

%macro TEST( X= );
   %if  not ( &X in (1,2) )  %then %put NOTE: マクロ変数 X は 1 と 2 じゃない;
%mend;

%TEST( X=3 );

ログ
 NOTE: マクロ変数 X は 1 と 2 じゃない


0 件のコメント:

コメントを投稿