區分整列和當前行你好,
我正在努力實現一個簡單的“包含”公式。 這是一個示例數據集和公式:

文本如下:包含(:第 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 -> 同樣的問題。