Come trovo le righe con gli stessi valori per due colonne qualsiasi in una determinata colonna?Ad esempio, colonne 1 —— 3 qui:
dt = Open( "$SAMPLE_DATA\Missing Data Pattern.jmp" );
dt<<NEW column=""></NEW>

Grazie!
Automazione e scriptingRi: Come trovo le righe con gli stessi valori per due colonne qualsiasi in una data colonna?Grazie per l'aiuto!

Ri: Come trovo le righe con gli stessi valori per due colonne qualsiasi in una data colonna?@lwx228 , @txnelson ,
Solo per il gusto di farlo...
- Aggiunto @lwx228 dati di esempio a @txnelson , vedere la tabella dei dati JMP allegata JN_AdjacentPlus.jmp
- Lo script seguente è incorporato nella tabella. Lo script si chiama "Trova qualsiasi riga con colonne adiacenti corrispondenti", in realtà i valori corrispondenti non si svuotano.
- Nota n. 1: questo script prenderà qualsiasi numero di colonne. Non è necessario che le colonne siano adiacenti nella tabella dei dati, basta modificare la specifica della colonna nella definizione di xmat.
- Nota n. 2: Abs(x1-x2) assicura che le corrispondenze adiacenti restituiscano zero e tutti gli altri valori siano > 0.
- Nota #3: Vmin() trova il minimo di ogni colonna di una matrice. Quindi, transpose( Vmin(transpose(Abs(x1-x2))) ) restituisce il minimo di riga di Abs(x1-x2)
- Nota #4: Loc( vec ==0 ) restituisce i numeri di riga il cui valore è zero.
- Nota #5: La soluzione di Jim trova qualsiasi corrispondenza, questo script trova corrispondenze adiacenti.
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;
Ri: Come trovo le righe con gli stessi valori per due colonne qualsiasi in una data colonna?Grazie Jim!
Mode( dt[i, 1::3] || [-999] ) == -999
Ri: Come trovo le righe con gli stessi valori per due colonne qualsiasi in una data colonna?Ecco una visione diversa della questione.Sto usando una funzione Mode () per vedere qual è la modalità.Se esiste una modalità effettiva, ciò significa che almeno 2 valori corrispondono e quindi la colonna t1 verrà impostata su 1. Vedere i commenti JSL per una spiegazione più completa.
Ho allegato una tabella di dati che ho usato per il test.
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
)
);
Ri: Come trovo le righe con gli stessi valori per due colonne qualsiasi in una data colonna?
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;