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 );
参照の最初の形式を含めなかったことに注意してください。 :高さ値が返されて式に保存されるため col =:height 不足している ("。")!その結果は私の理論を助けていない!残りのテストでは何が得られましたか?

ちょっと待って!単一のエラーは発生しませんでしたが、毎回同じ結果が得られませんでした。最初の2つの結果は正しいですが、最後の2つは間違っています。(40行あることに注意してください高さ最後の高さ= 70。ちなみに40 * 70 = 2800です。)私の理論をもう1つテストしてみましょう。列参照を再度取得して保存し、それを使用してメッセージを送信しましょう。
// 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開発者に打ち明けるためかもしれません。)私の理論は、
- :高さ 、列(「高さ」) 、コラム(4) 、 :Name( "高さ") 、そして列として( "height") すべてが有効または列参照として機能します。
- 列(「高さ」) そしてコラム(4) 列参照を返す関数です。
- :高さ 、 :Name( "高さ") 、そして列として( "height") はじゃない列参照を返す関数。
- なのでカラム() はコロンのエイリアスです( " : ")に見られるスコープ演算子 :高さ 、割り当てで使用される場合、現在の行の値を返します。
だから私の推奨事項は何ですか?
- 使用する :高さ 、列(「高さ」) 、コラム(4) 、 :Name( "高さ") 、または列として( "height") 列参照として。
- 使用する列(「高さ」) またはコラム(4) 列参照を取得する関数。
- 使ってはいけません :高さ 、 :Name( "高さ") 、または列として( "height") 列参照を取得します。
科学的手法のこの適応(アボミネーション?)が、JMPスクリプトで列参照を使用する方法を明確にするのに役立つことを願っています。推奨事項に従い、さらなる混乱とフラストレーションを回避してください。
しゅう
コードを実行するとき
names default to here(1);
// 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 );
結果が得られません...... JMP 15.1を実行しています。 私が得るものは:
sum = 2502;
sum = 2502;
sum = .;
sum = .;
私は何が欠けていますか?
私はあなたが何かを見逃しているとは思わない!
JMP Pro 15.1も使用しています。コードをテストする前に再起動しました。それ以外は、経験の違いは何なのかわかりません。
私の理論のテストと貢献の継続をありがとう!