單列 V 找出等效項嘿大家,
因此,我一直在使用與 Excel 中的 vlookup 相同的公式,但現在我發現它不適用於較大的數據表,因為它基本上會陷入困境並殺死 JMP。
附件是一個範例資料表,其中我分離了兩個我組合起來的函數,它們按預期工作:

VLU 項目

VLU 結果

如果我將「VLU Item」欄中的公式放入 VLU Results 公式中,就會造成死循環。將這兩個列分開顯示並不是什麼大問題,但如果能用一個公式來處理,會更簡潔。
感謝您的任何想法! !
史蒂夫
資料混合與清理回覆:單列 V 找出等效項隨著全新 Col Aggregation 的引入,JMP19 中的一些速度問題得到了修復:
JMP 19 圖形產生器的新功能
這個也是一樣:)
回覆:單列 V 找出等效項在 JMP 中執行 VLookup 的另一種方法是使用更新平台。這種方法非常有效率。它要求查找值位於單獨的表中,但對於您的資料表來說,這是一個簡單的操作。這裡有一個可以快速執行查找的腳本。
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 );
回覆:單列 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 )]
回覆:單列 V 找出等效項謝謝@txnelson !
我本來想將它保留為公式列,但我也會將它保留在我的後口袋裡。
回覆:單列 V 找出等效項謝謝@hogi !
我比較喜歡你的比喻。另外,你建議使用 COLMEDIAN() 非常有效。這兩個函數的效能差異如此之大,真是不可思議。這又是一個期待盡快安裝 19 的理由。
回覆:單列 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()] ) || "\!"]" ) ) );
回覆:單列 V 找出等效項哇!
- 按組別進行二維匯總*)
- ...輸入關聯數組以刪除缺少的條目:
總結對條目進行排序,缺少的條目排在第一位,並用第二對條目覆蓋
- 使用作為常數加速
甚至更短:
As Constant(
Summarize( bygp = by( :HEADER_ID, :VALUE_STR ) );
aa = Associative Array( bygp[1], bygp[2] );
);
aa[Char( :HEADER_ID[Row()] )];
*) 重要:總結儲存字串(也適用於數字列)
-> aa[char(數字)]