Ri: Come si può ottenere direttamente il risultato del confronto senza aggiungere colonne ausiliarie?Grazie a Jim!
Quindi il primo modo in cui ci penserò è quando hai molti dati in fila, puoi usare la memoria per farlo più velocemente.Ri: Come si può ottenere direttamente il risultato del confronto senza aggiungere colonne ausiliarie?E te lo chiederò di nuovo, ho provato il primo metodo, e non c'è risultato. Non so dove ho fatto un errore, grazie!Ri: Come si può ottenere direttamente il risultato del confronto senza aggiungere colonne ausiliarie?Il risultato della prima operazione di codice
Grazie!

Ri: Come si può ottenere direttamente il risultato del confronto senza aggiungere colonne ausiliarie?Sono un po 'confuso da cosa intendi quando dici " ottenuto direttamente senza aggiungere colonne ausiliarie "; Ho messo insieme 2 semplici script. Il primo si attiene rigorosamente alla tua affermazione, in quanto non crea colonne inutili per produrre i risultati. Tuttavia, questo metodo è inefficiente e non si scalerà molto bene se le tabelle di dati diventano grandi
Names Default To Here( 1 );
d1 = Open( "$SAMPLE_DATA/Trial1.jmp" );
d2 = Open( "$SAMPLE_DATA/Trial2.jmp" );
// Create the new column by comparing values between the data tables
d2 << New Column( "Result",
formula(
compare = d1:yield[((d1 <<
get rows where(
d1:popcorn == d2:popcorn & d1:oil amt == d2:oil amt &
d1:batch == d2:batch ))[Row()])];
If( compare > d2:yield[Row()],
theResult = 1,
theResult = 0
);
theResult;
)
);
// Change the values of the column Result to static values by removing
// the formula
d2:Result << delete property( "formula" );
Il secondo esempio è molto efficiente, ma utilizza colonne aggiuntive temporanee, ma i risultati finiscono allo stesso modo:
Names Default To Here( 1 );
d1 = Open( "$SAMPLE_DATA/Trial1.jmp" );
d2 = Open( "$SAMPLE_DATA/Trial2.jmp" );
// Temp. change of the name of the Yield column in data table 1
d1:yield << set name("yield1");
// Copy the Yield1 column to data table 2
d2 << Update(
With( d1 ),
Match Columns( :popcorn = :popcorn, :oil amt = :oil amt, :batch = :batch ),
Add Columns from Update table( :yield1 )
);
// Change the Yield1 column in data table 1 back to it's original name
d1:yield1 << set name("yield");
// Create and calculate the Result column in data table 2
d2 << new column("Result", formula(
If(:yield1 > :yield, 1,0);
));
// Change the values of the column Result to static values by removing
// the formula
d2:Result << delete property( "formula" );
// Delete the no longer needed Yield1 column
d2<<DELETE columns=""></DELETE>
Come si può ottenere direttamente il risultato del confronto senza aggiungere colonne ausiliarie?Ciao a tutti!
La resa delle due tabelle della stessa specifica è diversa,
Il risultato del confronto può essere ottenuto direttamente senza aggiungere colonne ausiliarie:
I risultati sono ottenuti nella tabella 2: se la resa nella tabella 1 è maggiore di quella nella tabella 2, il risultato è 1; altrimenti, il risultato è 0.
d1 = Open( "$SAMPLE_DATA/Trial1.jmp" );
d2 = Open( "$SAMPLE_DATA/Trial2.jmp" );
Grazie!
Ri: Come si può ottenere direttamente il risultato del confronto senza aggiungere colonne ausiliarie?Quali messaggi sono nel registro JMP?
Inoltre, c'era una copia mancante sull'ultima riga del codice per il primo metodo
" Il secondo"
è stato miss copiato. Assicurati che non sia nel tuo codice.
Ri: Come si può ottenere direttamente il risultato del confronto senza aggiungere colonne ausiliarie?indice non valido (deve essere numero o elenco di numeri) {1} in accesso o valutazione di '(d1 << recupera le righe dove (d1: popcorn == d2: popcorn & d1: oil amt == d2: oil amt & d1: batch == d2: batch)) [Row ()] ', (d1 << ottieni righe dove (
d1: popcorn == d2: popcorn & d1: olio amt == d2: olio amt & d1: lotto == d2: lotto
))[/*###*/Riga()]
Grazie a Jim!

Ri: Come si può ottenere direttamente il risultato del confronto senza aggiungere colonne ausiliarie?Questo sembra essere lo sbaglio
Ri: Come si può ottenere direttamente il risultato del confronto senza aggiungere colonne ausiliarie?Non so cosa dire. Ho eseguito il mio codice sotto JMP Pro fino a JMP 11 e non riesco a farlo fallire. Sono in esecuzione su Window's 10
Potrebbe essere necessario portare questo al Supporto JMP per poter indagare ulteriormente sulla discrepanza.Ri: Come si può ottenere direttamente il risultato del confronto senza aggiungere colonne ausiliarie?Vedo. Grazie a Jim!Ri: Come si può ottenere direttamente il risultato del confronto senza aggiungere colonne ausiliarie?Ecco un altro approccio. Questo usa matrici. Fa alcune supposizioni tra le matrici e le tabelle di dati, ma spero che ti dia abbastanza per iniziare se sei interessato.
Names Default To Here( 1 );
sourceTable = Data Table( "Trial1" );
resultsTable = Data Table( "Trial2" );
convertToMatrix = Function( {dt},
{Default Local},
mtrx = dt << get all columns as matrix;
numberOfColumns = N Col( mtrx );
For( i = 1, i <= numberOfColumns - 1, i++,
mtrx[0, i] *= 10 ^ (i - 1);
If( i > 1,
mtrx[0, i] = mtrx[0, i] + mtrx[0, i - 1]
);
);
mtrx[0, 1 :: numberOfColumns - 2] = [];
mtrx;
);
sourceMatrix = convertToMatrix( sourceTable );
resultsMatrix = convertToMatrix( resultsTable );
numberOfResults = N Row( resultsMatrix );
results = J( numberOfResults, 1, 0 );
For( i = 1, i <= numberOfResults, i++,
key = sourceMatrix[i, 1];
value = sourceMatrix[i, 2];
index = Loc( resultsMatrix == key ) + 1;
results[Floor( index / 2 )] = resultsMatrix[index] < value;
);
resultsTable << New Column( "Result", numeric, "continuous", values( results ) );Ri: Come si può ottenere direttamente il risultato del confronto senza aggiungere colonne ausiliarie?Ho intenzione di provare e imparare come fare questo array di memoria. Grazie mille!