区分整列和当前行你好,
我正在努力实现一个简单的“包含”公式。 这是一个示例数据集和公式:

文本如下:包含(:第 1 列,:第 2 列)
问题:我认为它总是检查第 1 列(整个)的当前行。 我希望它检查整个列,而不仅仅是当前行。 您可以看到 E 和 B 位于第 2 列中,但输出显示未在整体中找到该部分。
我如何明确地说,检查整个列而不仅仅是该列的当前行?
非常感谢!
基础数据分析和建模回复:区分整列和当前行这是解决问题的一种方法
As Constant( colList = :Column 1 << get values );
Contains( colList, :Column 2 );
回复:区分整列和当前行你好@凯文布伦纳,
我认为在 JMP 中比较列(而不是行)的最明显方法是使用表连接。
也许是这样的
// New data table
// → Data Table( "Untitled" )
dt1 = New Table( "Untitled" );
dt1 << New Column("Column 1", Character, "Nominal", Set Values({"A", "B", "C", "D", "E"}));
// New data table
// → Data Table( "Untitled 2" )
dt2 = New Table( "Untitled 2" );
dt2 << New Column("Column 2", Character, "Nominal", Set Values({"A", "E", "F", "B", "H"}));
// Join data tables
// → Data Table( "Untitled 3" )
dt1 << Join(
With( dt2 ),
Match Flag( 1 ),
By Matching Columns( :Column 1 = :Column 2 ),
Drop multiples( 0, 0 ),
Include Nonmatches( 1, 1 ),
Preserve main table order( 1 )
);
也可以使用单击而不是脚本来完成。如下图所示

回复:区分整列和当前行也许我可以进一步澄清目标。
在第 3 列中,如果找到第 2 列中的当前行,我想要一个返回 1 的函数任何地方在第 1 栏。 因此,在我的示例中,第 3 列应显示 1, 1, 0, 1, 0。 因为这些行中的 E 和 B 位于第 1 列中。
非常感谢!
回复:区分整列和当前行我试过这个。 它更接近,但不完全是我正在寻找的。 它计算的东西超出了我正在寻找的东西。 它说 B 是 5,E 是 2。 我只需要 true 或 false、1 或 0。

回复:区分整列和当前行As Constant( colList = :Column 1 << get values );
Contains( colList, :Column 2 ) > 0;
回复:区分整列和当前行
... 下列的@tx尼尔森第二个建议:
https://community.jmp.com/t5/Discussions/Differentiate- Between-entire-column-and-current-row/mp/675677/highlight/true#M86260
或者:
Local( {t0 = :Column 1 << get values}, Contains( t0, :Column 2 ) > 0 )它生成一个局部变量:

计算一次并用于每一行。
更差:
t0 = :Column 1 << get values;
Contains( t0, :Column 2 ) > 0;
这个版本将得到这价值观对每一行一遍又一遍。
回复:区分整列和当前行再次感谢你的帮助。
我能够简化代码:
包含(:第 1 列 << 获取值, :第 2 列) > 0;
它正是我想要的。 也许这对你将来有帮助。
干杯。
回复:区分整列和当前行您还可以使用作为常量()仅评估第一行
Names Default To Here(1);
row_count = 10000; // 100 000 starts getting slow
dt = New Table("test",
Add Rows(row_count),
New Column("Die X", Numeric, Nominal),
New Column("Die Y", Numeric, Nominal),<BR />invisible
);
dt << Begin Data Update;
For Each Row(dt,
:Die X = Random Integer(1, N Rows(dt));
:Die Y = Random Integer(1, N Rows(dt) * 2);
);
dt << End Data Update;
wait(0);
start = HP Time();
dt << New Column("Formula", Numeric, Nominal, Formula(
Contains(:Die X << Get Values, :Die Y) > 0;
));
dt << Run Formulas;
Show(HP Time() - start);
start = HP Time();
dt << New Column("Formula As Constant", Numeric, Nominal, Formula(
As Constant(x_m = :Die X << get values);
Contains(x_m, :Die Y) > 0;
));
dt << Run Formulas;
Show(HP Time() - start);
回复:区分整列和当前行表格更新怎么样?
如果 Jmp 更新 col 1 中的条目,则所有 3 个变体都会更新 - 所以一切似乎都很好......
Names Default To Here(1);
row_count = 10; // 100 000 starts getting slow
dt = New Table("test",
Add Rows(row_count),
New Column("col1", set each value(Random Integer(1, row_count))),
New Column("col2", set each value(Random Integer(1,row_count*2))));
wait(0);
New Column( "Formula", Formula( Contains( :col1 << Get Values, :col2 ) > 0 ));
New Column( "Formula with local variable", Formula( Local( {t0 = :col1 << get values()}, Contains( t0, :col2 ) > 0 ) ));
New Column( "Formula As Constant", Formula(As Constant( t_1 = :col1 << get values ); Contains( t_1, :col2 ) > 0));
:col1 << set each value(-10);
:col1[1] = :col2[1];
回复:区分整列和当前行...直到您手动尝试。
我感兴趣的是如果作为常数注意到更新。 这里没有问题。
但令人惊讶的是,“公式”列存在一个我实际上没有预料到的问题:
经过第一次正确的计算后,第一的的计算列停止正常工作并开始 1 对 1 比较列条目!?!
(我的代码是正确的,不是吗?)
根据 Jmp 手册, contains 的第一个参数必须是

它也允许使用 JSL 符号(如 t0),这真是太好了:)
但用更复杂的表达方式似乎不太舒服。
回复:区分整列和当前行JMP 19.0.4 -> 同样的问题。