スコープ演算子は、名前が曖昧な場合(たとえば、変数と列名の両方を指している場合)の解決の助けとなります。
::z = :x + :y;
ヒント: Names Default to Here(1)関数も名前の解決に影響を与えます。詳細は、「プログラミング手法」章の「Names Default To Hereとグローバル変数」(246ページ)の節を参照してください。
スコープ演算子と同様に使用できるJSL関数が2つあります。スコープ演算子は、その関数と構文を示したものです。
As Column(dt, name)
|
|||
nameをグローバル変数として評価させる。
|
1.
|
接頭部のコロン(:)は、名前がグローバル変数ではなく、テーブル列またはテーブル変数を参照することを意味します。接頭部のコロンは、現在のデータテーブルの内容を参照します。
|
:年齢;
2.
|
二項演算子のコロン(:)は、この考え方を拡張して、データテーブル参照を使って、どのデータテーブルの列なのかを指定します。これは、スクリプト内で複数のデータテーブルが参照されている場合に特に重要です。
|
dt = Data Table( "Big Class.jmp" );
dt:年齢 // コロンは二項演算子。
As Column()の場合も同じ結果となります:
dt = Data Table( "Big Class.jmp" );
As Column( dt, 年齢 );
したがって、「Big Class.jmp」が開いている場合に限り、次の式も等価です。
:年齢;
As Column( dt, 年齢 );
dt:年齢;
Column( "年齢" );
Column( 2 );
Column( dt, 2 );
Column( dt, "年齢" );
列名と同名の変数があるスクリプトを実行すると、「無効な行番号です。」というエラーが発生します。この問題を防ぐには、列名と変数名が重複しないように注意するか、次のように名前の適用範囲(スコープ)を指定します。
::年齢 = [];
年齢 = :年齢 << Get As Matrix;
::年齢 = :年齢 << Get As Matrix;
dt1 = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt2 = Open( "$SAMPLE_DATA/Students.jmp" );
::年齢 = dt1:年齢 << Get As Matrix;
::Name(" 身長( インチ)") = dt2:身長 << Get As Matrix;
JMPは、列にある連続したセルすべてについて列計算式を評価します。そのため、通常は列名の適用範囲を指定する必要はありません。ただし、計算式内に割り当てられた変数が列と同名の場合、その列名の適用範囲を指定する必要があります。詳細は、「プログラミング手法」章の「適用範囲が指定された名前」(248ページ)を参照してください。
–
|
データテーブルにその名前のテーブル変数がある場合、テーブル変数が優先します。その他のすべてのケースでは、名前はグローバル変数、ローカル変数、または引数に結び付けられます。グローバル変数とローカル変数についての詳細は、第 “グローバル変数とローカル変数”を参照してください。
デフォルトでは、現在の行の番号は0で、これは無効な数値です。そのため、次の式はグローバル変数ratioに欠測値を割り当てます。
ratio = :Name(" 身長(インチ)") / :Name(" 体重(ポンド)");
Row()関数を使って行番号を指定します。次の例は、行を3に設定します。その行の身長を体重で割り、その結果をグローバル変数ratioに割り当てます。
Row() = 3;
ratio = :Name(" 身長(インチ)") / :Name(" 体重(ポンド)");
ratio = :Name("身長(インチ)")[3] / :Name("体重(ポンド)")[4];
スクリプトがデータテーブルの各行に対して実行される場合、行番号の指定は必要ありません。次の例は、「比率」列を作成します。各行の身長を体重で割っています。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Column( "比率" );
For Each Row( :比率 = :Name("身長(インチ)") / :Name("体重(ポンド)") );
JMPは計算式を評価し、列全体にわたって反復して事前評価された統計量を計算します。このような場合も、行番号の指定は必要ありません。(事前計算された統計量は、「データテーブル」章の「事前計算される統計量」(417ページ)で説明するように、データテーブルから計算される単一の数値です。)