Using scoping operators is an easy way to help JMP resolve ambiguous names (for example, when a name refers to both a variable and a column name).
In the following example, the prefix double-colon operator (::) identifies z as a global variable. The single-colon prefix operator (:) identifies x and y as column names.
提示:The Names Default to Here(1) function also affects name resolution. See “Names Default To Here and Global Variables” on page 254 in the “Programming Methods” chapter for details.
Two JSL functions are interchangeable with scoping operators. Scoping Operators describes the functions and syntax.
As Column(dt, name)
|
Forces name to be evaluated as a data table column. The optional data table reference argument, dt, sets the current data table. See Scoped Column Names for examples.
|
||
Forces name to be evaluated as a global variable.
|
1.
|
The prefix colon (:) means that the name refers to a table column or table variable only, never a global variable. The prefix colon refers to the current data table context.
|
2.
|
The infix colon (:) operator extends this notion by using a data table reference to specify which data table has the column. This is particularly important when multiple data tables are referenced in a script.
|
In the following example, the dt variable sets the data table reference to Big Class.jmp. The infix colon separates the data table reference and age column.
As Column() achieves the same results:
Therefore, the following expressions are equivalent when only Big Class.jmp is open:
The Column function can also identify a column. For Big Class.jmp, the following expressions all refer to age, the second column in the table:
When you run a script that includes a column and variable with the same name, an Invalid Row Number error occurs. To prevent this problem, use unique column and variable names, or scope the names as follows:
::age = dt1:age << Get As Matrix;
::height = dt2:height << Get As Matrix;
Note that JMP evaluates column formulas through each consecutive cell of the column, so scoping the column name is usually unnecessary. However, if a variable assigned in a formula has the same name as a column, you must scope the column name. For details, see “Scoped Names” on page 256 in the “Programming Methods” chapter.
•
|
‒
|
or the name is subscripted (for example, the subscript [1] in weight[1] selects the first value in the weight column).
|
If the data table has a table variable by that name, then the table variable takes precedence. In all other cases, it binds to a global, local, or argument. For more information about global and local variables, see Global and Local Variables.
By default, the current row is 0, an illegal row number. So the following expression assigns a missing value to the ratio global variable:
Specify the row number with the Row() function. In the following example, the row is set to 3. The height in that row is divided by the weight, and the result is assigned to the ratio global variable.
Row() = 3;
Specifying the row number is unnecessary when the script iterates a row at a time down the whole column. The following example creates the ratio column. For each row, the height is divided by the weight.
For Each Row( :ratio = height / weight );
JMP evaluates formulas and calculates pre-evaluated statistics iteratively down a column. In these instances, identifying the row number is also unnecessary. (Pre-evaluated statistics are single numbers computed from the data table, as discussed in “Pre-Evaluated Statistics” on page 432 in the “Data Tables” chapter.)