Match()関数を使うと、比較対象となる値をすべて手で入力しなくても、等しいかどうかの比較を繰り返すことができます。構文は次のとおりです。
Match( x, value1, result1, value2, result2, ..., resultElse );
たとえば次のスクリプトは、「Big Class.jmp」の性別の略称をコード変更します。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
For Each Row( 性別 =
Match(
性別,
"F", "女性",
"M", "男性",
"不明");
);
このスクリプトは次のように機能します。
For Each Row( 性別 = |
テーブルの各行で「性別」の列の値を変更するよう指定する。 |
Match( |
Match()ループを開始する。 |
性別, |
「性別」をMatchの引数に指定する。 |
"F", "女性", |
値が「F」であれば、「女性」に置き換える。 |
"M", "男性", |
値が「M」であれば、「男性」に置き換える。 |
"不明" ); |
FとMのどちらでもない場合は、「不明」に置き換える。 |
); |
ループを終了する。 |
このMatch()の例は、If関数の例を単純にしたものです。Match()の利点は、比較の変数を条件式ごとに繰り返す必要がなく、一度定義するだけでよいことです。欠点は、Ifとは異なり、演算子のある式が使えないことです。Match()式で性別 == "F"という引数を使うと、エラーになります。
条件と結果のグループが多いほど、Match()が本領を発揮します。次のようなスクリプトにIf()を使ったとすると、もっと多くの行が必要になります。
dt = Open( "$SAMPLE_DATA/Travel Costs.jmp" );
For Each Row(
予約した曜日 = Match( 予約した曜日,
"Sunday", "SUN",
"Monday", "MON",
"Tuesday", "TUE",
"Wednesday", "WED",
"Thursday", "THU",
"Friday", "FRI",
"Saturday", "SAT",
"Not Specified"
)
);
条件と結果のデータタイプに気をつけてください。前述の例では、条件も結果も文字データです。データタイプが一致しないと、列のデータタイプが自動的に変更されてしまうため、期待したような結果にならないことがあります。
メモ: Match()関数は比較の値xが欠測値であるか、value1の値が欠測値であるかを明示的にチェックします。もし両方とも欠測値であればresult1の値を戻します。そうでなければ欠測値を無視して、式xとvalueN/resultNのvalueNとの比較を続けます。もし式xがvalueN値のいずれかと等しい場合は、対応するresultN値を戻します。もし等しいvalueN値が見つからなければ、resultElse値を戻します。