JSLでは、欠測値を含む比較の多くは欠測値を戻し、真または偽は戻されません。そのため、スクリプトの処理が止まらないよう、常に真となる結果を含めることが大切な場合があります。データテーブル列に1、2、3という値が含まれており、列「A」に欠測値が1つあるとします。列「B」の計算式が比較を設定します。
New Table( "比較のテスト",
Add Rows( 4 ),
New Column( "A",
Numeric,
"Continuous",
Format( "Best", 10 ),
Set Values( [1, 2, 3, .] )
),
New Column( "B", Character, "Nominal", Formula( If( :A, "true", 1, "false" ) ) )
);
次の値が列「B」に入れられます。
"true"
"true"
"true"
"false"
このスクリプトは次のように機能します。
If( |
比較を開始する。 |
:A, "true", |
「A」の値が欠測値でも0でもない場合、 結果は"true"。最初の3行では、この比較の結果は真です。 |
1, "false" |
1の値は常に真であるため、欠測値は"false"を戻します。 |
); |
比較を閉じる。 |
メモ:
• セルに空でない文字列が含まれる場合、最初の比較で失敗します。aが文字列の場合、以下のスクリプトは欠測値を返します。aが数値であればこの比較は動作します。
a = "a";
If( a, "真", "偽" );
• 1つの値が偽で、もう1つが欠測値の場合、Or()は欠測値を戻します。その代わりに「偽」を返すようにするにはOrMZ()を用います。『スクリプト構文リファレンス』のOrMZ(a, b)を参照してください。
• 1つの値が偽で、もう1つが欠測値の場合、And()は欠測値を戻します。その代わりに「偽」を返すようにするにはAndMZ()を用います。『スクリプト構文リファレンス』のAndMZ(a, b)を参照してください。
• MatchMZ()は、欠測値を0として扱う以外はMatch()と同じです。
• IfMZ()は、欠測値を0として扱う以外はIf()と同じです。
いずれかの値が欠測値であるとわかっている場合は、Is Missing()を使った比較も可能です。前述の例は、欠測値に対して"missing"を戻すように書き直すことができます。その場合、次のようになります。
If( :A, "true", Is Missing( :A ), "missing", "false" );
上記の式は、Aが欠測値ではなく、ゼロでない場合は"true"を返し、Aが欠測値の場合は"missing"を返し、それ以外の場合は"false"を返します。
欠測値が0の可能性がある場合は、代わりにZero Or Missing()関数を使用します。
Zero Or Missing( A );
この式は、Aが0または欠測値の場合に1を戻します。
ヒント: 既知の値を、明示的な欠測値と比較することはできません。比較できるのは、欠測値を含む変数や行列などだけです。