スクリプティング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 );
OK、何が得られましたか?

毎回同じ結果。 したがって、私の理論では、これら 5 つの異なる参照は同等であるということです。 私の最初のテストは私の理論を確認します。 しかし、それは最初のテストにすぎません。 別のテストを考えてみましょう。 最初に列参照を取得して保存し、次に保存された参照を使用して同じ統計を計算しましょう。
// 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 );
参照の最初の形式を含めていないことに注意してください。 :身長値が返され、式に格納されるため列 = :高さ不足している ("。")! その結果は私の理論を助けていません! 残りのテストで何が得られましたか?

ちょっと待って! エラーは 1 つも発生しませんでしたが、毎回同じ結果が得られるわけではありませんでした。 最初の 2 つの結果は正しいですが、最後の 2 つの結果は間違っています。 私の理論をもう一度テストしてみましょう。 再び列参照を取得して保存し、それを使用してメッセージを送信しましょう。
// 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 );
これが最初の2つの方法で得られるものです。

最初の 2 つの方法は、期待どおりに機能するようです。 3番目の方法を試してみましょう。
col = :Name( "height" );
type = col << Get Data Type;
Show( type );
この方法はうまくいきませんでした。

最後の方法はどうですか?
col = As Column( "height" );
type = col << Get Data Type;
Show( type );
前回と同じエラーが発生します。

私の理論を修正する時が来たことは明らかです。 (JMP開発者に打ち明けるためかもしれません。)私の理論は今では
- :身長、 Column( "高さ" ) 、列( 4 ) 、 :名前( "身長" ) 、 とAs Column( "高さ" )すべてが有効な列参照として機能または機能します。
- Column( "高さ" )と列( 4 )列参照を返す関数です。
- :身長、 :名前( "身長" ) 、 とAs Column( "高さ" )それはいいえ列参照を返す関数。
- として桁()コロン (" : ") に見られるように、スコープ演算子:身長代入で使用された場合、どちらも現在の行の値を返します。
それで、私の推薦は何ですか?
- 使用する:身長、 Column( "高さ" ) 、列( 4 ) 、 :名前( "身長" ) 、 またAs Column( "高さ" )列の参照として。
- 使用するColumn( "高さ" )また列( 4 )列参照を取得する関数。
- 使用禁止:身長、 :名前( "身長" ) 、 またAs Column( "高さ" )列参照を取得します。
この科学的手法の適応 (嫌悪?) が、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 = .;