单列 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(数字)]