公開日: 09/19/2023

条件付き関数と論理関数

And(a, b)

a&b

説明

論理積。

戻り値

abの両方が真のときは1(true)

aまたはbのどちらか、またはabの両方が偽のときは0(false)

aまたはbのどちらか、またはabの両方が欠測値のときは欠測値

引数

2つ以上の変数または式。

メモ

3つ以上の引数を取ることができます。a&bは、すべての引数が真と評価されたときのみ、1(true)を戻します。

AndMZ(a, b)

a:&b

説明

すべての引数の論理積を戻す。欠測値はゼロとして扱われます。

戻り値

abの両方が真のときは1(true)

aまたはbのどちらか、またはabの両方が偽のときは0(false)

aまたはbのどちらか、またはabの両方が欠測値のときは0(false)

引数

2つ以上の変数または式。

メモ

3つ以上の引数を取ることができます。a:&bは、すべての引数が真と評価されたときのみ、1(true)を戻します。

Break()

説明

ループを完全に停止して、ループの後に続くステートメントの実行に移る。

メモ

Break()は、Forループ、Whileループ、およびFor Each Rowで使用できます。

次も参照

『スクリプトガイド』のBreak

Choose(expr, r1, r2, r3, ..., resultElse)

説明

式(expr)を評価し、exprの値が1のときはr1の値を戻し、2のときはr2の値を戻す。どれにも該当しない場合は最後の引数(resultElse)を戻します。

戻り値

引数リスト内でインデックスがexprとマッチする値、または最後の引数の値

引数

expr

式または値。

r1, r2, r3, ...

式または値。

resultElse

どれにも該当しないときに戻される引数。

次も参照

『スクリプトガイド』のChoose関数

Continue()

説明

ループの現在の反復を終了して、次の反復を開始する。

メモ

Continue()は、Forループ、Whileループ、およびFor Each Rowで使用できます。

次も参照

『スクリプトガイド』のContinue

Filter Each(names, container, locals, body)

説明

リスト、連想配列、行列のいずれかであるコンテナ(container)で反復し、各反復におけるブール式の評価に基づいてコンテナ内の値のサブセットを戻す。値、キー、または要素、そして通し番号を、各反復において指定できます。

コンテナが連想配列である場合は、キーと値をペアにしたリストを指定することで、それらキーと値の組み合わせを評価することもできます。

コンテナが行列である場合は、デフォルトでは全要素に対する通し番号が与えられますが、行番号と列番号をペアにしたリストを2つ目の項目に指定することで、それら行番号と列番号を評価することができます。

それらのシンボルは、ループの本体(body)だけで使われます。ローカル変数のリストを指定することもできます。ローカル変数を定義した場合、それらのローカル変数は最初の反復においてシンボルが設定された後に初期化されます。

戻り値

元のコンテナからのサブセット。元のコンテナと同じ種類のオブジェクトが戻されます。

引数

names

ループ制御の変数名を、リストとして指定する。リストの形式は、コンテナの種類によって異なります。この最初のnames引数はオプションであり、locals引数またはbody引数で参照する必要がある場合のみ指定します。要素や通し番号などを参照する必要がない場合、最初のnames引数には、{}またはList()を使って空白のリストを指定してください。

コンテナがリストである場合は、names引数として指定するリストには、コンテナとして指定したリスト内の各値を参照する変数と、リスト内の通し番号を参照する変数を含めます。

コンテナが連想配列である場合は、names引数として指定するリストには、連想配列のキーと値に対応したリストと、通し番号を参照する変数を含めます。

コンテナが行列である場合は、names引数として指定するリストには、行列の各要素の値を参照する変数と、行列内での通し番号を参照する第2引数を含めます。この第2引数には、全体での通し番号を参照したい場合には変数を指定してください。一方、行番号および列番号を参照したい場合には、それらをペアにしたリストを指定してください。

Across()キーワードを使って複数のコンテナを指定する場合は、names引数に指定するリストには、各コンテナの値を参照する変数を含めたリストを含めてください。その際、そのリストに含める項目の個数は、Across()キーワードで指定したコンテナの個数と一致しなければなりません。

container

リスト、連想配列、または行列。コンテナ(container)は、引数で定義するか、前に定義したオブジェクトへの参照として指定できます。

この引数は、Across()キーワードを使うことにより、複数のコンテナを扱うこともできます。複数のコンテナは、個別の引数として、またはリスト内の項目として指定できます。Across()キーワードには、オプションのCount()引数があります。この引数では、サイズが異なるコンテナの扱い方を指定できます。使用できるCount()のオプションは、"Shortest""Longest""Enforce Equal"Nです。ここで、Nは数値です。数値を指定した場合、すべてのコンテナにおいて、N回の反復が行われます。なお、その際、項目数がNより少ないコンテナは、項目数を超えると最初の項目に戻ります。

locals

関数に対してローカルである変数のリスト。これは、JSLでの他のローカル変数の初期化と同じです。ローカル変数の初期化は、最初のループ制御変数が設定された後に行われますが、その後、二度と行われることはありません。

body

有効なJSL式。セミコロンで区切って複数の式を指定することができ、その場合、最後のJSL式で含めるか否かが判断される。そのJSL式の結果は、ブール値になるようにしてください。そのJSL式の結果が真の場合、現在の反復におけるコンテナの値が結果に含められます。そのJSL式の結果が真でない場合は、現在の反復におけるコンテナの値は結果に含まれません。Continue()関数を使うと、「偽」が戻されて次の反復に進んだ場合と同じになります。また、Break()関数を使ってループの反復を停止し、ループの後の式に進むこともできます。『スクリプトガイド』のBreak関数とContinue関数を参照してください。

values = Filter Each( {x}, {10, 20, 30}, x > 15 );
Show( values );

values = {20, 30};

For(init, while, increment, body)

説明

bodyに指定されたスクリプトを、条件(while)が真である間、繰り返し実行する。initincrementによって反復を制御します。

戻り値

なし

引数

init

ループ制御カウンタの初期化。

while

ループの継続/終了の条件。条件文のwhileが真である限り、ループは再度反復される。whileが偽になると、即座にループは終了する。

increment

ループが実行されるたびに、whileが評価された後、ループカウンタをインクリメント(またはデクリメント)する。

body

任意の数の有効なJSL式。セミコロンで区切ることにより、複数のJSL式を指定できる。

mysum = 0; myprod = 1;
For( i = 1, i <= 10, i++, mysum += i; myprod *= i; );
Show( mysum, myprod );

mysum = 55;

myprod = 3628800;

次も参照

『スクリプトガイド』のFor関数

For Each(names, container, locals, body)

説明

リスト、連想配列、行列のいずれかであるコンテナ(container)で反復する。コンテナには、値、キー、または要素が含まれる。各反復で通し番号を使うこともできる。コンテナが連想配列である場合は、2項目を含むリストを指定することによって、キーと値を評価することができます。コンテナが行列である場合は、デフォルトでは全要素に対する通し番号が与えられますが、行番号と列番号をペアにしたリストを2つ目の項目に指定することで、それら行番号と列番号を評価することができます。それらのシンボルは、ループの本体(body)だけで使われます。ローカル変数のリストを指定することもできます。そローカル変数を定義した場合、それらのローカル変数は、最初の反復においてシンボルが設定された後に初期化されます。

引数

names

ループ制御の変数名を、リストとして指定する。リストの形式は、コンテナの種類によって異なります。この最初のnames引数はオプションであり、locals引数またはbody引数で参照する必要がある場合のみ指定します。要素や通し番号などを参照する必要がない場合、最初のnames引数には、{}またはList()を使って空白のリストを指定してください。

コンテナがリストである場合は、names引数として指定するリストには、コンテナとして指定したリスト内の各値を参照する変数と、リスト内の通し番号を参照する変数を含めます。

コンテナが連想配列である場合は、names引数として指定するリストには、連想配列のキーと値に対応したリストと、通し番号を参照する変数を含めます。

コンテナが行列である場合は、names引数として指定するリストには、行列の各要素の値を参照する変数と、行列内での通し番号を参照する第2引数を含めます。この第2引数には、全体での通し番号を参照したい場合には変数を指定してください。一方、行番号および列番号を参照したい場合には、それらをペアにしたリストを指定してください。

Across()キーワードを使って複数のコンテナを指定する場合は、names引数に指定するリストには、各コンテナの値を参照する変数を含めたリストを含めてください。その際、そのリストに含める項目の個数は、Across()キーワードで指定したコンテナの個数と一致しなければなりません。

container

リスト、連想配列、または行列。コンテナ(container)は、引数で定義するか、前に定義したオブジェクトへの参照として指定できます。

この引数は、Across()キーワードを使うことにより、複数のコンテナを扱うこともできます。複数のコンテナは、個別の引数として、またはリスト内の項目として指定できます。Across()キーワードには、オプションのCount()引数があります。この引数では、サイズが異なるコンテナの扱い方を指定できます。使用できるCount()のオプションは、"Shortest""Longest""Enforce Equal"Nです。ここで、Nは数値です。数値を指定した場合、すべてのコンテナにおいて、N回の反復が行われます。なお、その際、項目数がNより少ないコンテナは、項目数を超えると最初の項目に戻ります。

locals

関数に対してローカルである変数のリスト。これは、JSLでの他のローカル変数の初期化と同じです。ローカル変数の初期化は、最初のループ制御変数が設定された後に行われますが、その後、二度と行われることはありません。

body

有効なJSL式。セミコロンで区切って複数の式を指定することができ、その場合、最後のJSL式が変換後の値となります。Continue()関数を使って次の反復に進むことができます。また、Break()関数を使ってループの反復を停止し、ループの後の式に進むこともできます。『スクリプトガイド』のBreak関数とContinue関数を参照してください。

For Each( {value, index}, {10, 20, 30}, Show( value, index ) );

value = 10;

index = 1;

value = 20;

index = 2;

value = 30;

index = 3;

For Each Row(<dt>, script)

説明

データテーブルの各行に対してスクリプト(script)を繰り返す。

戻り値

なし

必須の引数

script

任意の有効なJSL式。

オプションの引数

dt

データテーブルへの参照である位置引数。この引数が割り当ての形式をとらない場合は、データテーブルの式とみなされます。

次の例は、データテーブルへの参照を設定し、「Big Class.jmp」のすべての行に処理を適用します。ある行の「年齢」の値が15より大きい場合は、その年齢がログに出力されます。

dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
For Each Row( dt, If( :年齢 > 15, Show( :年齢 ) ) );

次も参照

『スクリプトガイド』のIf関数

If(condition1, result1, <condition2, result2>, ..., <elseResult>)

説明

引数の各ペアにおいて、 condition引数がゼロ以外の結果になるとき、結果(result)を戻す。condition引数は順番に評価されます。すべてのcondition引数がゼロになる場合は、オプションのelseResultを評価し、その結果を戻します。elseResultの指定がなく、conditionのいずれも真でない場合は、欠測値を戻します。condition引数のすべてが欠測値になる場合は、欠測値を戻します。

次も参照

『スクリプトガイド』のIf関数

IfMax(expr1, result1, expr2, result2, ... <all missing results>)

説明

引数の各ペアにおいて、1つ目の引数が最大値となっているペアの結果(各ペアの2つ目)を戻します。最大値となる式が複数ある場合には、最初の最大値に対応する結果を戻します。すべての式が欠測値で、最後の結果式が指定されていない場合、欠測値を戻します。すべての式が欠測値であり、最後の結果式が指定されている場合は、最後の結果式の評価を戻します。条件式は数値になる必要がありますが、結果式はどのような値でもかまいません。

戻り値

最大値に対する結果式の評価

IfMin(expr1, result1, expr2, result2, ... <all missing results>)

説明

引数の各ペアにおいて、1つ目の引数が最小値となっているペアの結果(各ペアの2つ目)を戻します。最小値となる式が複数ある場合には、最初の最小値に対応する結果を戻します。すべての式が欠測値で、最後の結果式が指定されていない場合、欠測値を戻します。すべての式が欠測値であり、最後の結果式が指定されている場合は、最後の結果式の評価を戻します。条件式は数値になる必要がありますが、結果式はどのような値でもかまいません。

戻り値

最小値に対する結果式の評価

IfMZ(condition1, result1, <condition2, result2>, ..., <elseResult>)

説明

引数の各ペアにおいて、condition1引数がゼロ以外の結果になるとき、結果(result)を戻す。condition引数は順番に評価されます。すべてのcondition引数がゼロまたは欠測値になる場合は、オプションのelseResultを評価し、その結果を戻します。elseResultの指定がなく、conditionのいずれも真でない場合は、欠測値を戻します。

メモ

条件式(condition)の引数は、最初にゼロ以外の結果が出るまで順番に評価されます。すべての条件式がゼロまたは欠測値になる場合、elseExpr引数が評価されます。

IfMZ()If()と等価ですが、condition引数の評価結果が欠測値になった場合はその結果をゼロとして扱います。

Interpolate(x|xmatrix|xlist, x1, y1, x2, y2, ...)

Interpolate(x|xmatrix|xlist, xmatrix, ymatrix)

Interpolate({x, y}, xvector, yvector, zmatrix)

説明

連続量であるデータの線形補間を実行する。この関数は、いろいろな方法で指定できます。

最も単純な例では、xmatrixymatrixで与えられた関数(もしくは、x, yの2変数のペアで与えられた関数)について、第1引数のx値に対応したy値を戻します。x値(x1x2、...)またはxmatrixは、昇順に並んでいる必要があります。

最初の引数に数値の行列またはリストを指定した場合、行列またはリストで補間した値が戻されます。

引数として4つを指定すると双線形補間(bilinear interpolation)を実行することができます。ここで、第1引数は2つの点を含むリストで、第2引数と第3引数はxとy の値のグリッドを定義するベクトル、第4引数はデータ点の行列です。関数は、zmatrixの該当する長方形領域内で補間されたz値を求めます。

戻り値

補間された値。3つの引数を指定した場合、戻り値の種類は第1引数の種類と同じものです。4つの引数を指定した場合、戻り値は数値です。

次も参照

『スクリプトガイド』のInterpolate関数

Is Associative Array(name)

説明

評価後の引数が連想配列のときは1、そうでなければ0を戻す。

Is Empty(global)

Is Empty(dt)

Is Empty(col)

説明

global変数、データテーブル、またはデータ列が定義されていないか、Empty()値をもつときは1、そうでなければ0を戻す。

次も参照

『スクリプトガイド』の特定の要素のタイプ

Is Expr(x)

説明

評価後の引数が式のときは1、そうでなければ0を戻す。

Is List

Is List(x)を参照してください。

Is Name(x)

説明

評価後の引数が名前のときは1、そうでなければ0を戻す。

Is Namespace(namespace)

説明

引数namespaceが名前空間の場合は1、そうでなければ0を戻す。

Is Number(x)

説明

評価後の引数が数値か欠測値のときは1、そうでなければ0を戻す。

Is Scriptable(x)

説明

評価後の引数がスクリプト可能なオブジェクトのときは1、そうでなければ0を戻す。

次も参照

『スクリプトガイド』の特定の要素のタイプ

Is String(x)

説明

引数が引用符付き文字列のときは1、そうでなければ0を戻す。

Match(x, value1, result1, value2, result2, ..., resultElse)

説明

aが値1(value1)に等しいときは結果1(result1)を戻し、aが値2(value2)に等しいときは結果2(result2)、・・・を戻す。

メモ

Match()関数は比較の値xが欠測値であるか、value1の値が欠測値であるかを明示的にチェックします。もし両方とも欠測値であればresult1の値を戻します。そうでなければ欠測値を無視して、式xvalueN/resultNvalueNとの比較を続けます。もし式xvalueN値のいずれかと等しい場合は、対応するresultN値を戻します。もし等しいvalueN値が見つからなければ、resultElse値を戻します。

次も参照

『スクリプトガイド』のMatch関数

MatchMZ(x, value1, expr1, value2, expr2, ..., exprElse)

説明

x引数を評価してexprNを戻すか、xと一致するvalueNがない場合はexprElse引数を評価して戻す。

メモ

MatchMZ()関数は、Match()関数と同じように動作しますが、欠測値を0として扱います。

Not(a)

!a

説明

論理否定。

戻り値

aが0以外のときは0(false)

a=0 のときは1(true)

aが欠測値のときは欠測値

引数

a

任意の変数または数値。変数の場合、数値または行列でなければなりません。

メモ

主に、条件文や、ループの制御で使用されます。

Or(a, b)

a|b

説明

論理和。

戻り値

abのどちらかまたは両方が真のときは1(true)

そうでなければ0(false)

一方が欠測値で、もう一方が欠測値もしくは偽の場合には、欠測値を戻す。

引数

a, b

任意の変数または数値。

メモ

主に、条件文や、ループの制御で使用されます。

OrMZ(a, b)

a:|b

説明

欠測値を0とみなし、すべての引数の論理和(OR)を戻す。いずれかの引数が0以外であれば1、それ以外の場合には0を戻す。

戻り値

abのどちらかまたは両方が真のときは1(true)

そうでなければ0(false)

引数

a, b

任意の変数または数値。

メモ

主に、条件文や、ループの制御で使用されます。

Or()は、いずれの引数の評価が欠測値である場合には、欠測値を戻します。OrMZ()は、いずれの引数の評価も欠測値である場合、0を戻します。

Return(<expr1>, <expr2>, ..., <exprN>)

説明

ユーザ定義の関数から式の値を戻します。

次の例では、Return()関数の2つの式の結果がリストで戻されます。Return()関数には、2つ以上の引数を指定することもできます。引数が1つしかない場合は、その式の値が戻されます。引数が2つ以上ある場合は、すべての式の値がリストとして戻されます。

f = Function( {a, b},
	Return( a - b, a + b )
);
{lo, hi} = f( 10, 1 );
Show( lo, hi );
Show( f( 7, 15 ) );

lo = 9;

hi = 11;

f(7, 15) = {-8, 22};

メモ

Return()を関数やメソッド、再帰的関数呼び出しの中でないところで使用すると、エラーとなります。

Step(x0, x1, y1, x2, y2, ...)

Step(x0, [x1, x2, ...], [y1, y2, ...])

説明

x0以下となっている引数xのうち、最大の値に対応する引数yを戻す。引数xは小さい順に指定されていなければなりません。

次も参照

『スクリプトガイド』のStep関数

Stop()

説明

実行中のスクリプトを直ちに停止します。

Transform Each(names, container, <Output(type)>, <locals>, body)

説明

リスト、連想配列、行列のいずれかであるコンテナ(container)で反復し、各反復でコンテナ内の値を更新する。値、キー、または要素、そして通し番号を、各反復において指定できます。コンテナが連想配列である場合は、キーと値をペアにしたリストを指定することで、それらキーと値の組み合わせを評価することもできます。コンテナが行列である場合は、デフォルトでは全要素に対する通し番号が与えられますが、行番号と列番号をペアにしたリストを2つ目の項目に指定することで、それら行番号と列番号を評価することができます。それらのシンボルは、ループの本体(body)だけで使われます。ローカル変数のリストを指定することもできます。ローカル変数を定義した場合、それらのローカル変数は最初の反復においてシンボルが設定された後に初期化されます。

戻り値

元のコンテナを更新したもの。Output()キーワードを使って別の種類のコンテナを戻すよう指定した場合を除き、元のコンテナと同じ種類のオブジェクトが戻されます。

引数

names

ループ制御の変数名を、リストとして指定する。リストの形式は、コンテナの種類によって異なります。この最初のnames引数はオプションであり、locals引数またはbody引数で参照する必要がある場合のみ指定します。要素や通し番号などを参照する必要がない場合、最初のnames引数には、{}またはList()を使って空白のリストを指定してください。

コンテナがリストである場合は、names引数として指定するリストには、コンテナとして指定したリスト内の各値を参照する変数と、リスト内の通し番号を参照する変数を含めます。

コンテナが連想配列である場合は、names引数として指定するリストには、連想配列のキーと値に対応したリストと、通し番号を参照する変数を含めます。

コンテナが行列である場合は、names引数として指定するリストには、行列の各要素の値を参照する変数と、行列内での通し番号を参照する第2引数を含めます。この第2引数には、全体での通し番号を参照したい場合には変数を指定してください。一方、行番号および列番号を参照したい場合には、それらをペアにしたリストを指定してください。

Across()キーワードを使って複数のコンテナを指定する場合は、names引数に指定するリストには、各コンテナの値を参照する変数を含めたリストを含めてください。その際、そのリストに含める項目の個数は、Across()キーワードで指定したコンテナの個数と一致しなければなりません。

container

リスト、連想配列、または行列。コンテナ(container)は、引数で定義するか、前に定義したオブジェクトへの参照として指定できます。

この引数は、Across()キーワードを使うことにより、複数のコンテナを扱うこともできます。複数のコンテナは、個別の引数として、またはリスト内の項目として指定できます。Across()キーワードには、オプションのCount()引数があります。この引数では、サイズが異なるコンテナの扱い方を指定できます。使用できるCount()のオプションは、"Shortest""Longest""Enforce Equal"Nです。ここで、Nは数値です。数値を指定した場合、すべてのコンテナにおいて、N回の反復が行われます。なお、その際、項目数がNより少ないコンテナは、項目数を超えると最初の項目に戻ります。

Output(type)

出力のタイプを指定する。選択肢には、"List""Matrix""Associative Array"があります。デフォルトでは、出力の種類は、入力に指定したコンテナの種類と同じものです。

locals

関数に対してローカルである変数のリスト。これは、JSLでの他のローカル変数の初期化と同じです。ローカル変数の初期化は、最初のループ制御変数が設定された後に行われますが、その後、二度と行われることはありません。

body

有効なJSL式。セミコロンで区切って複数の式を指定することができ、その場合、最後のJSL式が変換後の値となります。各反復において、JSL式の結果が、出力のコンテナでの各要素の値に設定されます。Continue()関数を使用すると、反復においては値が戻されず、次の反復に進みます。また、Break()関数を使ってループの反復を停止し、ループの後の式に進むこともできます。『スクリプトガイド』のBreak関数とContinue関数を参照してください。

values = Transform Each( {x}, {10, 20}, x + 10 );
Show( values );

values = {20, 30};

While(expr, body)

説明

条件式(expr)を評価し、真であれば本文の式(body)を実行する。これを条件式(expr)が真でなくなるまで繰り返します。

次も参照

『スクリプトガイド』のWhile関数

Zero Or Missing(expr)

説明

式(expr)が欠測値またはゼロを生成する場合に1を戻し、そうでない場合は0を戻す。

より詳細な情報が必要な場合や、質問があるときは、JMPユーザーコミュニティで答えを見つけましょう (community.jmp.com).