腳本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 = .;