%IF &マクロ変数名 IN ( 値1, 値2 )
みたいな書き方は出来ない。。。と思ったら実はできる。
以下のプログラムは、マクロ変数 「MVAR1」 に 「1」 か 「2」 が設定されていたら、
ログにメッセージを表示するサンプル。
options minoperator mindelimiter=',' ; %let MVAR1=1; %macro TEST; %if &MVAR1 in (1,2) %then %put マクロ変数 MVAR1には 1 か 2 が設定されています; %mend; %TEST; |
- 「minoperator」 でINが使えるようになります
- 「IN」の代わりに「#」でもOK( %if &MVAR1 # (1,2) %then ... )
- 「mindelimiter」 には値を区切る時の区切り文字(シングルバイト1文字)を指定
- 「% & ' " ( ) ;」といったマクロ等で意味を持ちそうな区切り文字は設定できません
今回の例では条件値を「,」で区切っています。
%IF条件でのINを利用不可に戻したいときは
options nominoperator; |
delimiterの設定を戻すオプションはヘルプとかみても見つからず。
📝注意
- 以下で紹介したIF/WHEREのINで使えるコロンは、ここでは使用できません
- 検索文字に「マクロ機能が誤認識を起こす文字」が含まれる場合、以下記事のようなクォート処理を忘れずに
- マクロ言語入門5:クォート処理【%STR関数】
- マクロ言語入門6:クォート処理【%BQUOTE関数】
- ただし「区切り文字」自体をINの後の検索文字に含めたい場合、何故かクォート処理が効かないので注意。例えば区切り文字が「,」で「%if &MVAR1 in (%str(1,2)) 」と書いても、「1,2」ではなく「1」か「2」として検索されちゃいます
「%IF条件」で「IN」を使う。(その2)
助かりました! by 隣^^;
返信削除お役に立ててよかったです!
返信削除今日助かったので米しようとしたら、昔にも見たんですね(^^:)
返信削除引き続きお役に立てて良かったです!
削除