列全体と現在の行を区別しますこんにちは、
単純な「contains」式を実装するのに苦労しています。 サンプルのデータセットと式は次のとおりです。

テキストは次のとおりです: Contains(:Column 1, :Column 2)
問題: 常に列 1 (全体) の現在の行をチェックしていると思います。 現在の行だけでなく列全体をチェックしたいと考えています。 E と B が列 2 にあることがわかりますが、出力では全体の中にその部分が見つからないことが示されています。
列の現在の行だけでなく列全体をチェックすると明示的に言うにはどうすればよいでしょうか?
どうもありがとうございます!
基本的なデータ分析とモデリングRe: 列全体と現在の行を区別したい問題を解決する 1 つの方法は次のとおりです
As Constant( colList = :Column 1 << get values );
Contains( colList, :Column 2 );
Re: 列全体と現在の行を区別したいこんにちは@ケビン・ブルナー、
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 )
);
スクリプトではなくクリックを使用して実行することもできます。下の写真のように

Re: 列全体と現在の行を区別したいもう少し目標を明確にしても良いかもしれません。
列 3 には、列 2 の現在の行が見つかった場合に 1 を返す関数が必要です。どこでも列 1 にあります。 したがって、この例では、列 3 には 1、1、0、1、0 が表示されるはずです。 これらの行の E と B は列 1 にあるためです。
どうもありがとうございます!
Re: 列全体と現在の行を区別したいこれを試してみました。 それはかなり近いものですが、私が探しているものとはまったく異なります。 私が探しているもの以上のものを数えています。 Bは5、Eは2と書いてあります。 true か false、1 か 0 だけが必要です。

Re: 列全体と現在の行を区別したいAs Constant( colList = :Column 1 << get values );
Contains( colList, :Column 2 ) > 0;
Re: 列全体と現在の行を区別したい
... 続く@txnelsonさんの 2 番目の提案:
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;
このバージョンでは、得るの価値観単一行ごとに何度も繰り返します。
Re: 列全体と現在の行を区別したいご協力いただきありがとうございます。
コードを簡略化することができました。
Contains(:列 1 << 値を取得, :列 2) > 0;
それはまさに私が望むことを実現します。 もしかしたらこれが将来役立つかもしれません。
乾杯。
Re: 列全体と現在の行を区別したい使用することもできます定数として()最初の行のみを評価するには
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);
Re: 列全体と現在の行を区別したいテーブルの更新はどうでしょうか?
Jmp が列 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];
Re: 列全体と現在の行を区別したい...手動で試してみるまでは。
興味があったのは、一定としてアップデートに気づきます。 ここでは問題ありません。
しかし、どういうわけか驚くべきことに、「式」列には実際には予期していなかった問題があります。
最初の正しい計算の後、初め計算された列の一部が正常に動作しなくなり、列エントリを 1 つずつ比較し始めます。
(私のコードは正しいですよね?)
Jmpマニュアルによると、containsの最初の引数は次のようにする必要があります。

JSL シンボル (t0 など) も許可するのは素晴らしいことです:)
しかし、これ以上複雑な表現には抵抗があるようです。
Re: 列全体と現在の行を区別するJMP 19.0.4 -> 同じ問題。