JMPの計算式エディタでは、計算式に条件式の関数を含めることができます(これらの関数は、計算式エディタでは、「条件付き」のグループに分類されています)。条件式の関数では、条件節と結果を指定します。これらの関数を用いると、列の各セルに、条件によって、異なる計算結果を割り当てることができます。条件式の関数には次のルールがあります。
• どの節も真ではない場合、計算式エディタはelse節の結果式を評価して戻します。
• 条件式の結果式はすべて、評価された結果が同じデータタイプになる必要があります。
• ただし、評価された結果が欠測値であった場合、その欠測値は該当の列のデータタイプになります。
• JMPでは、条件節でのゼロは偽を意味します。
• 条件節が欠測値である場合、どの節も実行されず、欠測値が戻されます。ゼロでなく、また、欠測値でもないすべての数値は真を意味します。
構文の詳細については、『スクリプトガイド』の条件付き関数および『スクリプト構文リファレンス』の条件付き関数と論理関数を参照してください。
条件式に項目を追加したり削除したりするには、計算式エディタパネルの挿入ボタンおよび削除ボタンを使います。処理時間を短くするには、最も頻繁に評価される節と結果のペアを、一番最初に指定します。
メモ: Interpolate、Step、For、およびWhileといった関数は、もっぱらJMPスクリプト言語(JSL; JMP Scripting Language)でプログラミングするときに用います。計算式エディタでもこれらの関数を使えますが、依存性と曖昧性が生じるためお薦めしません。通常、JSLプログラムは、.jslという拡張子で保存します。また、JSLプログラムは、テーブルプロパティとしてデータテーブルに保存することもできます。テーブルプロパティの詳細については、データテーブルの「テーブル」パネルを参照してください。JMPスクリプト言語については、『スクリプト構文リファレンス』を参照してください。
計算式エディタにて、関数の一覧からIf関数を選択すると、条件節、then節、else節のブロックが空白で表示されます。これらのブロックをクリックして、式や値を入力してください。たとえば、「合計」が0でない場合にだけ、「度数÷合計」を計算するには、Figure A.3に示すような条件式にします。
図A.3 条件式
If条件に新しい条件を追加するには、then節を強調表示し、計算式エディタのキーパッドにある挿入ボタン()をクリックします。まず、既存のelse条件が式に変更されます。挿入ボタンをもう一度クリックすると、else節が追加されます。then節またはelse節を強調表示して挿入ボタンを繰り返しクリックすると、else節条件が式に変わるか、または新しい式が追加されます。
節を削除するには、その上のthen節を選択し、Deleteキーを押すか、または計算式エディタのキーパッドにある削除ボタン()をクリックします。
JMPでは、条件節でのゼロは偽を意味します。条件節が欠測値である場合、どの節も実行されず、欠測値が戻されます。ゼロでなく、また、欠測値でもないすべての数値は真を意味します。
式を複数の値と比較し、最初に一致した値に対するthen節の結果を戻します。Matchでは、各値と比較する式を1つだけ入力すれば済みます。
計算式エディタでいずれかのデータ列を選択して[Match]を選択すると、ポップアップメニューに、次の2つのオプションが表示されます。
• [Matchの引数をデータから追加]オプション。このオプションを選択すると、該当する列の全水準に対する節が自動的に追加されます。別の方法として、Shiftキーを押しながら[条件付き]を選択し、[Match]を選択することもできます。Figure A.4の左側は、自動的に追加された節を示しています。
• [追加しない]オプション。このオプションを選択した場合は、ユーザ自身が各節を追加していってください。Figure A.4の右側は空の節を示しています。これらの空の節を、自分で埋めていってください。
図A.4 Match関数の使用例
自動的に引数が挿入されている場合は、then節を強調表示してから式を入力します。引数が空の場合は、「式」、「値」、または「then節」のいずれかを強調表示して、式を入力します。計算式内のいずれかの式を強調表示した後、Matchをクリックした場合は、強調表示した式が「式」に代入されたMatch関数が作成されます(この時、「then節」と「値」は空白のままです)。また、以下の点に留意してください。
• MatchはIfよりも速く計算でき、使用するメモリも少なくて済みます。これは、変数がデータテーブル内の各行で一度評価されるだけだからです。If条件は、節が真になるまで、各行のIf節で変数を評価する必要があります。Match条件とIf条件の違いについては、比較関数を参照してください。
• IfとMatchは、条件の一番上から最初の真の節を検索し、対応する結果の式を評価して戻します。後続の真の節は無視されます。
次の例は、年齢の値に従って、値が設定されています。
図A.5 Match関数の例
メモ: Matchは末尾の空白を無視しますが、Ifは無視しません。
Match関数は、条件節が欠測値の場合には、欠測値を戻します。そのため、欠測値に対する処理を別に記述する必要があります。
Choose関数は、Match関数に似ていますが、条件の引数が、1から始まる連続した整数になっています。条件にマッチした場合、対応する節の値が戻されます。Figure A.6は、Choose関数の例です。Choose関数は、条件にあてはまる節の結果式を評価し、その値を戻します。
図A.6 Choose条件の例
式を強調表示してChooseをクリックすると、計算式エディタは1つの節を伴う新しい条件式を作成します。If条件の場合と同様に、キーパッドの挿入ボタン()や削除ボタン()を使って節の追加や削除ができます。
Chooseは式を評価し、直ちにその値に対応する結果の節に行って値を戻します。Chooseを使った場合、1から始まる連続した整数を生成する式を一つ入力するだけで、後は各整数に対応する結果の節を入力するだけで済みます。
引数の各ペアにおいて、1つ目の引数が最大値となっているペアの結果(各ペアの2つ目)を戻します。最大値となる式が複数ある場合には、最初の最大値に対応する結果を戻します。すべての式が欠測値で、最後の結果式が指定されていない場合、欠測値を戻します。すべての式が欠測値であり、最後の結果式が指定されている場合は、最後の結果式の評価を戻します。条件式は数値になる必要がありますが、結果式はどのような値でもかまいません。
引数の各ペアにおいて、1つ目の引数が最小値となっているペアの結果(各ペアの2つ目)を戻します。最小値となる式が複数ある場合には、最初の最小値に対応する結果を戻します。すべての式が欠測値で、最後の結果式が指定されていない場合、欠測値を戻します。すべての式が欠測値であり、最後の結果式が指定されている場合は、最後の結果式の評価を戻します。条件式は数値になる必要がありますが、結果式はどのような値でもかまいません。
引数が両方とも真の場合、1を戻します。それ以外の場合、0を戻します(Figure A.9)。Figure A.7の計算式では、両方の比較が真である参加者だけがグループ1に分類されます。
図A.7 And関数の作成
引数のどちらかが真の場合、1を戻します。引数が両方とも偽の場合は0を戻します(Figure A.9)。Figure A.8の計算式では、男性と13歳より年上のすべての参加者をグループ1に割り当てます。
図A.8 Or関数の作成
Figure A.9の左側の真偽表は、2つの引数が真/偽のいずれかであるときの、And(&)関数およびOr(|)関数の戻り値を示しています。右側の表は、左側(a)か右側(b)のどちらか、または両方の式に欠測値がある場合の結果を示しています。
図A.9 AndとOrの評価
引数が偽の場合、1を戻します。引数が真の場合、0を戻します。Not関数を使う場合、曖昧さを避けるため、必要な個所に括弧を入れてください。たとえば、!(weight==64)は真にも偽にもなり得ます(1または0)。しかし、(!weight)==64は、Notが0か1しか戻さないので、常に偽(0)となります。!(weight==64)などの式は、weight != 64と入力することもできます。
引数で与えられた2点(x1,y1)と(x2,y2)を線形補間してえられたy値を戻します。挿入キーによって、引数xとyのペアを追加していくことができます。Interpolateは、x値に対応するyの値を戻します。
図A.10 Interpolate関数の例
Step関数はInterpolateと似ていますが、引数x以下で一番大きいxの値に対応するyの値を戻します。つまり、この関数は、線形補間ではなく、ステップ関数の補間によって、与えられたxに対するyを求めます。Interpolate関数と同様、xとyのペアはいくつでも持つことができます。
図A.11 Step関数の例
範囲条件が真である限り、本体引数のステートメントを繰り返します。初期値と次の式は、繰り返しを制御します。
式条件を繰り返し判定し、式が真でなくなるまで本体を繰り返します。
Breakは、ループを完全に停止して、ループの後に続くステートメントを継続します。Continueは、ループの現在の反復を終了して、次の反復を開始します。
両方ともFor、While、およびFor Each Rowループで使用されます。
実行中のスクリプトを直ちに停止します。
ユーザ定義の関数から式の値を戻します。