別のデータテーブルから列を指定する<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />データ テーブル 1 の列の値と最もよく一致するデータ テーブル 2 の列の値を照合するスクリプトを作成するつもりです。2 つの異なるデータ テーブルからの入力を許可する JSL プラットフォームを作成することは可能ですか?そうでない場合、誰かが良い代替アプローチを知っていますか?
Re: 別々のデータテーブルから列を指定するありがとうジム!
Re: 別々のデータテーブルから列を指定するN Table() は、開いているデータ テーブルの数を返します。
それらをループして名前を取得できます
For(I=1, I<= N Table(),I++,
show(データテーブル(I)<<名前を取得);
);
Re: 別々のデータテーブルから列を指定するありがとうジム。開いているデータテーブルのリストを返す関数をご存知ですか?
Re: 別々のデータテーブルから列を指定する同じ表示ウィンドウ内の異なるデータ テーブルから 2 つの Col List Box() を設定することに制限はありません。[ヘルプ]==>[スクリプト インデックス] に移動し、表示ボックスの 3 番目の例である Col List Box() を見ると、1 つのデータ テーブルの列を表示し、列を選択できる例が表示されます。このサンプル スクリプトは、コードを複製することによって、同じ表示ウィンドウに表示されるように簡単に拡張できますが、参照変数への "dt" 参照を 2 番目のデータ テーブルに変更します。
Re: 別々のデータテーブルから列を指定するこんにちは、ジムさん
最終的なスクリプトでは、アドインに追加できるプラットフォーム。ユーザーは dt1 と dt2 の両方から列を選択するインターフェイスを使用できます。これは可能でしょうか?そうでない場合、回避策を知っていますか?
// プラットフォーム入力の例。
デフォルトの名前はここにあります( 1 ) ;
dt =現在のデータテーブル() ;
新しい窓( 「最も近い一致による結合」 、
<<モーダル、
テキストボックス( 「入力を選択」 ) 、
H リストボックス(
パネルボックス( 「dt1列を選択」 、 getCols =列リストボックス( dt 、全て) ) 、 // dt1 から列を取得します。
// dt2 から列を取得するスクリプトを追加します。
V リストボックス(
パネルボックス( 「dt1列」 、
ラインナップボックス( Nコル( 2 ) 、
ボタンボックス( 「dt1列」 、列1 <<追加( getCols <<選択してください) ) 、
列1 =列リストボックス( N ライン( 1 ) 、最大アイテム数( 1 ) 、数値)
)
) 、
パネルボックス( 「dt2列」 、
ラインナップボックス( Nコル( 2 ) 、
ボタンボックス( 「dt2列」 、列2 <<追加( getCols <<選択してください) ) 、
列2 =列リストボックス( N 行( 1 ) 、最大アイテム数( 1 ) 、数値)
)
)
)
)
) ;
Re: 別々のデータテーブルから列を指定するこんにちは、ジムさん
スクリプトをありがとうございます。おそらく実装で使用することになるでしょう。dt1 の値が dt2 の値の範囲外である場合を考慮して、数行を追加しました。
デフォルトの名前はここにあります( 1 ) ;
// サンプル データ テーブルを開きます
dt =開ける( "$SAMPLE_DATA/半導体能力.jmp" ) ;
// ルックアップの方法を示すためにいくつかのデータ テーブルを作成します
// 複数のテーブルに
dt1 = dt <<サブセット(選択された行( 0 ) 、列( npn1 ) ) ;
dt2 = dt <<サブセット(選択された行( 0 ) 、列( npn2 ) ) ;
近い( dt 、保存しない) ;
// テーブルをソートして最も近い値を見つけます
dt2 <<選別(による( NPN2 ) 、テーブルを置き換える( 1 ) ) ;
// 最初のテーブルに列を作成して行番号を保存します
// 最も近い 2 番目のテーブルから
dt1 <<新しい列( 「最も近い行番号」 ) ;
// 2番目に行番号を含む列を作成します
// データテーブルなので、最初のテーブルと結合するために使用できます
dt2 <<新しい列( 「行番号」 、価値観( 1 :: N 行( dt2 ) ) ) ;
// 2 番目のテーブルから、次の値に最も近い値を見つけます。
// 最初のデータテーブルの値
のために(私= 1 、私<= N 行( dt1 ) 、私++、
ザ・セレクテッド= dt2 <<行を取得します。 ( dt2 : NPN2 > dt1 : NPN1 [私】 ) ;
もし( N 行(ザ・セレクテッド) == 0 、
dt1 :最も近い行番号[私】 = N 行( dt2 ) 、 // ケース用に追加: TheSelected が空です
もし(ザ・セレクテッド[ 1 】 > 1 、
もし( dt2 : NPN2 [選択された[ 1 ]] - dt1 : NPN1 [私】 > dt1 : NPN1 [私] - dt2 : NPN2 [選択された[ 1 ] - 1 ] 、
dt1 :最も近い行番号[私】 =選択された[ 1 ] 、
dt1 :最も近い行番号[私] =選択された[ 1 】 - 1
) 、
dt1 :最も近い行番号[私] =選択された[ 1 】 ; // ケースに追加: TheSelected[1] == 1
)
) ;
) ;
// 見つかった最も近い値に基づいてテーブルを結合します
参加しました= dt1 <<参加する(
と( dt2 ) 、
出力テーブル名( 「最も近い値を結合」 ) 、
列の一致による( :最も近い行番号= :行番号) 、
複数をドロップする( 0 、 0 ) 、
不一致を含める( 1 、 0 ) 、
メインテーブルの順序を保持する( 1 )
) ;
Re: 別々のデータテーブルから列を指定する以下は、探していることを実行する方法の 1 つを示すサンプル スクリプトです。
デフォルトの名前はここにあります( 1 );
// サンプル データ テーブルを開きます
dt =開ける( "$SAMPLE_DATA/半導体能力.jmp" );
// ルックアップの方法を示すためにいくつかのデータ テーブルを作成します
// 複数のテーブルに
dt1 = dt <<サブセット( 選択された行( 0 )、列( npn1 ) );
dt2 = dt <<サブセット( 選択された行( 0 )、列( npn2 ) );
近い( dt 、 nosave );
// テーブルをソートして最も近い値を見つけます
dt2 <<選別( by( NPN2 )、テーブルを置き換えます( 1 ) );
// 最初のテーブルに列を作成して行番号を保存します
// 最も近い 2 番目のテーブルから
dt1 <<新しい列( 「最も近い行番号」 );
// 2番目に行番号を含む列を作成します
// データテーブルなので、最初のテーブルと結合するために使用できます
dt2 <<新しい列( 「行番号」 、値( 1 :: N 行( dt2 ) ) );
// 2 番目のテーブルから、次の値に最も近い値を見つけます。
// 最初のデータテーブルの値
のために( i = 1 、私<= N 行( dt1 )、i++、
TheSelected = dt2 <<行を取得します。 ( dt2:NPN2 > dt1:NPN1 );
もし( 選択済み[ 1 ] > 1 、
もし( dt2:NPN2[選択済み[ 1 ]] - dt1:NPN1 > dt1:NPN1 - dt2:NPN2[選択済み[ 1 ] - 1 ]、
dt1:最も近い行番号= 選択された[ 1 ]、
dt1:最も近い行番号= 選択された[ 1 ] - 1
)
);
);
// 見つかった最も近い値に基づいてテーブルを結合します
dtjoined = dt1 <<参加する(
With( dt52 ),OUTput テーブル名( 「最も近い値を結合」 )、
列の一致( : 最も近い行番号 = : 行番号 )、
複数をドロップ( 0 、 0 )、
不一致を含める( 1 、 0 )、
メインテーブルの順序を保持( 1 )
);