脚本JMP通常涉及使用数据列对象。 我们可能想要计算一列数字数据的统计信息。 我们可能想要更改列属性或特性。 在任何这些情况下,我们都需要对该列的引用,以便我们可以将其作为参数提供。 有几种方法可以获取或使用引用。 不幸的是,在我们感到惊讶之前,它们似乎在某种程度上是等价的。 科学理论是可以检验的。 一个理论一直有效,直到测试证明它无效。 让我们测试一些关于列引用的理论。
我正在使用高度JMP 样本数据文件夹中 Big Class 数据表中的数据列,即C:\Program Files\SAS\JMPPRO\15\Samples\Data就我而言。 让我们开始吧。
Names Default To Here( 1 );
// open a data table
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
我们的第一个测试将使用几种不同形式的列引用高度.
// use a reference to a data column
sum = Col Sum( :height );
Show( sum );
sum = Col Sum( Column( "height" ) );
Show( sum );
sum = Col Sum( Column( 4 ) );
Show( sum );
sum = Col Sum( :Name( "height" ) );
Show( sum );
sum = Col Sum( As Column( "height" ) );
Show( sum );
好的,我们得到了什么?

每次都是一样的结果。 所以我的理论是这五个不同的引用是等价的。 我的第一个测试证实了我的理论。 但这只是第一次测试。 让我们设计另一个测试。 让我们首先获取列引用,存储它,然后使用存储的引用来计算相同的统计数据。
// get a reference to a data column and then use it
col = Column( "height" );
sum = Col Sum( col );
Show( sum );
col = Column( 4 );
sum = Col Sum( col );
Show( sum );
col = :Name( "height" );
sum = Col Sum( col );
Show( sum );
col = As Column( "height" );
sum = Col Sum( col );
Show( sum );
请注意,我没有包括参考的第一种形式, :高度因为返回并存储在表达式中的值col = :高度不见了 (”。”)! 这个结果对我的理论没有帮助! 剩下的测试我们得到了什么?

等一下! 我没有得到一个错误,但每次都没有得到相同的结果。 前两个结果是正确的,但后两个是错误的。 让我们再对我的理论进行一次检验。 让我们再次获取一个列引用,存储它,然后用它来发送消息。
// get a reference to a data column and then use it
col = Column( "height" );
type = col << Get Data Type;
Show( type );
col = Column( 4 );
type = col << Get Data Type;
Show( type );
col = :Name( "height" );
type = col << Get Data Type;
Show( type );
col = As Column( "height" );
type = col << Get Data Type;
Show( type );
这是我用前两种方法得到的。

前两种方式似乎按预期工作。 让我们试试第三种方法。
col = :Name( "height" );
type = col << Get Data Type;
Show( type );
这种方法没有用。

最后一条路呢?
col = As Column( "height" );
type = col << Get Data Type;
Show( type );
我得到与上次相同的错误。

显然是时候修改我的理论了。 (也许是为了向 JMP 开发人员倾诉。)我现在的理论是
- :高度,列(“高度”) ,专栏( 4 ) , :姓名("身高") , 和作为列(“高度”)所有工作或充当有效的列参考。
- 列(“高度”)和专栏( 4 )是返回列引用的函数。
- :高度, :姓名("身高") , 和作为列(“高度”)是不是返回列引用的函数。
- 作为柱子()是冒号的别名(“ : ") 作用域运算符,如:高度, 如果在赋值中使用,它们都返回当前行的值。
那么我的建议是什么?
- 使用:高度,列(“高度”) ,专栏( 4 ) , :姓名("身高") , 或者作为列(“高度”)作为专栏参考。
- 使用列(“高度”)或者专栏( 4 )获取列引用的函数。
- 不使用:高度, :姓名("身高") , 或者作为列(“高度”)获取列参考。
我希望科学方法的这种改编(可憎?)有助于阐明如何在 JMP 脚本中使用列引用。 我希望您遵循这些建议,避免进一步的困惑和沮丧。
我不认为你错过任何东西!
我能够再次测试代码并发现在我的第一次尝试中存在运行时错误。 我得到和你一样的结果。 我编辑了我的文章以反映正确的结果。 我不会改变这个故事。
@马克贝利
我运行了您的代码,并收到了不同的结果。当我跑步时:
// get a reference to a data column and then use it
col = Column( "height" );
sum = Col Sum( col );
Show( sum );
col = Column( 4 );
sum = Col Sum( col );
Show( sum );
col = :Name( "height" );
sum = Col Sum( col );
Show( sum );
col = As Column( "height" );
sum = Col Sum( col );
Show( sum );
我得到:
sum = 2502;
sum = 2502;
sum = .;
sum = .;