特定の列内の 2 つの列に同じ値を持つ行を見つけるにはどうすればよいですか?たとえば、ここでは列 1 —— 3 です。
dt = Open( "$SAMPLE_DATA\Missing Data Pattern.jmp" );
dt<<NEW column=""></NEW>

ありがとう!
自動化とスクリプト作成Re: 特定の列内の 2 つの列に同じ値を持つ行を見つけるにはどうすればよいですか?ご協力ありがとうございました!

Re: 特定の列内の 2 つの列に同じ値を持つ行を見つけるにはどうすればよいですか?@lwx228 、 @txnelson 、
ただの楽しみのために...
- 追加した@lwx228サンプルデータへ@txnelson 、添付の JMP データ テーブル JN_AdjacentPlus.jmp を参照してください。
- 以下のスクリプトがテーブルに埋め込まれています。 このスクリプトは「隣接する列が一致する行を検索」という名前で、実際には空ではない値と一致します。
- 注 #1: このスクリプトは任意の数の列を受け取ります。 データテーブル内で列が隣接している必要はなく、xmat の定義で列の指定を変更するだけで済みます。
- 注 #2: Abs(x1-x2) は、隣接する一致がゼロを返し、他のすべての値が 0 より大きいことを保証します。
- 注 #3: Vmin() は、行列の各列の最小値を見つけます。 したがって、transpose( Vmin(transpose(Abs(x1-x2))) ) は、Abs(x1-x2) の行の最小値を返します。
- 注 #4: Loc( vec ==0 ) は、値が 0 の行番号を返します。
- 注5: Jim のソリューションでは任意の一致が検索され、このスクリプトでは隣接する一致が検索されます。
Names Default to Here(1);
dt = current data table();
xmat = dt[0,1::4];
nc = ncol(xmat);
x1 = xmat[0,1::nc-1];
x2 = xmat[0,2::nc];
idx = Loc( Transpose(Vmin(Transpose(abs(x1-x2)))) == 0);
dt << New Column("t1", numeric, continuous);
:t1[idx]=1;
Re: 特定の列内の 2 つの列に同じ値を持つ行を見つけるにはどうすればよいですか?ジムさん、ありがとう!
Mode( dt[i, 1::3] || [-999] ) == -999
Re: 特定の列内の 2 つの列に同じ値を持つ行を見つけるにはどうすればよいですか?ここでは、この問題に対する別の見方を示します。Mode() 関数を使用してモードが何であるかを確認しています。実際のモードが存在する場合は、少なくとも 2 つの値が一致することを意味するため、列 t1 は 1 に設定されます。より完全な説明については、JSL コメントを参照してください。
テストに使用したデータテーブルを添付しました。
Names Default To Here( 10 );
dt = Current Data Table();
New Column( "t1" );
For( i = 1, i <= N Rows( dt ), i++,
// add a value to the matrix that is less
// than any value in the data table. If
// the mode() function does not find an
// actual mode, it returns the smallest
// value from the matrix, so if that is
// the value returned, you know there
// are not at least 2 values that equal
// each other in the columns
If( Mode( dt[i, 0] || [-999] ) == -999,
dt:t1[i] = .,
dt:t1[i] = 1
)
);
Re: 特定の列内の 2 つの列に同じ値を持つ行を見つけるにはどうすればよいですか?
dt = Current Data Table();
x = dt << Get As Matrix();
For( i = 1, i <= N Row( dt ), i++,
For( j = 1, j <= 2, j++,
If( x[i, j] == x[i, j + 1],
x[i, 5] = 1;
Break();
)
)
);
dt[0, 0] = x;