IFN / IFC関数は、簡単に言うとIFステートメントの関数バージョンです。
IFN ( 条件式 , 条件式が真(TRUE)の場合の戻り値 , 条件式が偽(FALSE)の場合の戻り値 ) |
戻り値を数値で返したい場合はIFN関数を使い、文字値で返したい場合はIFC関数を使います。
*** サンプルデータ ; data DT1; A=10 ; output; A=. ; output; A=20 ; output; run; *** IFC関数を使ってみる ;
data OUT1;
set DT1; length B $30.; B = ifc( A<=10 , "10以下", "10より大きい" ); run;
|
Aが欠損値の場合にも「10以下」ってなるのはおかしいよねって感じなので、
その場合、以下のようにIFN / IFC関数をネストさせる方法もありますが、、ネスト増やして見づらくなるんだったら、IFステートメント使った方が良いですね。。
B = ifc(A=. ,"未記載", ifc( A<=10 , "10以下", "10より大きい" ) );
|
実はこの関数、謎の第4引数が存在します。
IFN( 条件式 , 条件式がTRUEの場合の戻り値 , 条件式がFALSEの場合の戻り値 , 条件式が欠損値の場合の戻り値 ) |
ずっと疑問なんですが、この第4引数ってどういう時に使うんでしょうか?
というのも条件式の結果は、TRUE か FALSE しか返しません。
たとえば上の方のサンプルプログラムでIFC関数に書いた条件式 「A<=10」 に対する真偽は以下のようになります。
・ Aの値が10以下の場合 ・・・ TRUE
・ Aの値が10より大きい場合 ・・・ FALSE
・ Aの値が欠損値の場合 ・・・ TRUE (「10以下」と解釈。)
なんでこの関数だけ3値論理?
ということで、こういう時に使えそうねってアイディアがあれば教えてほしいです。