単一列Vルックアップ相当皆さん、
そこで、Excel の vlookup と同じように機能する数式を使用してきましたが、大規模なデータ テーブルでは基本的に動作が遅くなり、JMP が停止してしまうため、この数式は機能しないことがわかりました。
添付されているのはサンプル データ テーブルです。ここでは、結合した 2 つの関数を分割しており、期待どおりに動作します。

VLUアイテム

VLU結果

「VLU 項目」列の数式を VLU 結果の数式に代入すると、悪循環に陥ってしまいます。列が 2 つに分かれていること自体は問題ありませんが、1 つの数式で処理できればよりすっきりします。
何かアイデアがあればよろしくお願いします!!
スティーブ
データのブレンドとクリーンアップRe: 単一列 V 検索の同等性新しい Col Aggregation の導入により、JMP19 ではいくつかの速度問題が修正されました。
JMP 19のグラフビルダーの新機能
これもそうです:)
Re: 単一列 V 検索の同等性JMPでVLOOKUPを実行するもう一つの方法は、Updateプラットフォームを使うことです。これは非常に効率的です。ルックアップ値が別のテーブルにある必要がありますが、データテーブルであれば簡単に操作できます。ルックアップを非常に高速に実行するスクリプトを以下に示します。
Names Default To Here( 1 );
dt = Current Data Table();
// Select matching cells
dt << Select Where( :VALUE_STR == "" );
// Invert current selection
dt << Invert Row Selection;
// Subset data table
// → Data Table( "Subset of Vlookup example" )
dt << Select Where( :VALUE_STR == "" );
dt << Invert Row Selection;
dtSum = dt << Subset(
Selected Rows( 1 ),
columns( :HEADER_ID, :VALUE_STR ),
output table( "Lookup" )
);
// Change column name: VALUE_STR → VLU Result from UPdate
dtSum:VALUE_STR << Set Name( "VLU Result from UPdate" );
// Update data table
dt << Update(
With( Data Table( dtSum ) ),
Match Columns( :HEADER_ID = :HEADER_ID )
);
// Remove Lookup table
Close( dtSum, nosave );
Re: 単一列 V 検索の同等性
@shampton82 は次のように書きました:
「VLU 項目」列の数式を取得して、それを VLU 結果の数式に入力すると、死のスパイラルが発生します。
実際のところ、これは死のスパイラルのように感じられますが、よく見ると、それは極端なコーヒー消費のスパイラルなのです。
さらに、JMP が列の式を再計算する頻度も表示されます。
この問題の原因は
Col Maximum(if (String comparison ))
列の式のアイデアを放棄する以外に、JMP < 19 のその他の回避策は次のとおりです。
- DON'T use a string comparison, convert the string to a number:
:VALUE_STR[Col Maximum( If( :X__3 == 3.1, Row(), . ), :HEADER_ID )]
ヒントとコツ - JMP/JSL のベストプラクティス
- ... or use 含む()
:VALUE_STR[Col Maximum( If( contains(:X__3 , "V3_1"), Row(), . ), :HEADER_ID )]
- DON'T use 最大() to "distribute" a single value in groups
... 列中央値() is much faster:
:VALUE_STR[Col Median( If( :X__3 == "V3_1", Row(), . ), :HEADER_ID )]
Re: 単一列 V 検索の同等性@txnelsonありがとう!
数式列として保存したいと思っていましたが、これもバックポケットに保存しておきます。
Re: 単一列 V 検索の同等性@hogiさんありがとう!
あなたの例えの方が気に入りました。COLMEDIAN() を使うというご提案も完璧に機能しました。2つの関数のパフォーマンスがこれほど違うとは驚きです。もうすぐ19がインストールされるのを楽しみにする理由がまた一つ増えました。
Re: 単一列 V 検索の同等性私は連想配列に基づいた解決策も思いつきました
As Constant(
Summarize( bygp = by( :HEADER_ID, :VALUE_STR ) );
aa = Associative Array( bygp[1], bygp[2] );
);
Parse( Eval( Parse( "aa[\!"" || Char( :HEADER_ID[Row()] ) || "\!"]" ) ) );
Re: 単一列 V 検索の同等性おお!
- グループごとに2次元でまとめる*)
- ... 連想配列に入力して、不足しているエントリを削除します。
要約すると、エントリがソートされ、欠落しているエントリが最初に表示され、2番目のペアで上書きされます。
- As Constant の使用による高速化
さらに短く:
As Constant(
Summarize( bygp = by( :HEADER_ID, :VALUE_STR ) );
aa = Associative Array( bygp[1], bygp[2] );
);
aa[Char( :HEADER_ID[Row()] )];
*) 重要: Summarize は文字列を保存します (数値列も同様)
-> aa[char(数値)]