Re: ¿Cómo se puede obtener el resultado de la comparación directamente sin agregar columnas auxiliares?Gracias jim
Entonces, la primera forma en que lo voy a pensar es que cuando tiene muchos datos seguidos, puede usar la memoria para hacerlo más rápido.Re: ¿Cómo se puede obtener el resultado de la comparación directamente sin agregar columnas auxiliares?Y volveré a preguntarte, probé el primer método y no hay resultados. No sé dónde cometí un error, ¡gracias!Re: ¿Cómo se puede obtener el resultado de la comparación directamente sin agregar columnas auxiliares?El resultado de la primera operación de código
¡Gracias!

Re: ¿Cómo se puede obtener el resultado de la comparación directamente sin agregar columnas auxiliares?Estoy un poco confundido por lo que quieres decir cuando dices " Obtenido directamente sin añadir columnas auxiliares. "; He reunido 2 guiones simples. El primero se adhiere estrictamente a su declaración, ya que no crea columnas innecesarias para producir los resultados. Sin embargo, este método es ineficiente y no se escalará muy bien si las tablas de datos aumentan de tamaño.
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" );
El segundo ejemplo es muy eficiente, pero utiliza columnas adicionales temporales, pero los resultados terminan igual:
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>
¿Cómo se puede obtener el resultado de la comparación directamente sin agregar columnas auxiliares?¡Hola a todos!
El rendimiento de las dos tablas de la misma especificación es diferente,
¿Se puede obtener el resultado de la comparación directamente sin agregar columnas auxiliares?
Los resultados se obtienen en la tabla 2: si el rendimiento en la tabla 1 es mayor que el de la tabla 2, el resultado es 1; De lo contrario, el resultado es 0.
d1 = Open( "$SAMPLE_DATA/Trial1.jmp" );
d2 = Open( "$SAMPLE_DATA/Trial2.jmp" );
¡Gracias!
Re: ¿Cómo se puede obtener el resultado de la comparación directamente sin agregar columnas auxiliares?¿Qué mensajes hay en el registro JMP?
Además, hubo una copia errónea en la última línea del código para el primer método
" El segundo"
fue miss copiado. Asegúrese de que no esté en su código.
Re: ¿Cómo se puede obtener el resultado de la comparación directamente sin agregar columnas auxiliares?subíndice no válido (debe ser el número o la lista de números) {1} en el acceso o evaluación de '(d1 << obtener filas donde (d1: palomitas de maíz == d2: palomitas de maíz & d1: aceite amt == d2: aceite de Amt & d1: lote == d2: lote)) [Fila ()] ', (d1 << obtener filas donde (
d1: palomitas de maíz == d2: palomitas de maíz & d1: aceite amt == d2: aceite amt & d1: lote == d2: lote
))[/*###*/Fila()]
Gracias jim

Re: ¿Cómo se puede obtener el resultado de la comparación directamente sin agregar columnas auxiliares?Ese parece ser el mistak
Re: ¿Cómo se puede obtener el resultado de la comparación directamente sin agregar columnas auxiliares?No se que decir He ejecutado mi código en JMP Pro todo el camino de regreso a JMP 11, y no puedo hacer que falle. Estoy corriendo en la ventana de 10
Es posible que deba llevar esto al Soporte de JMP para poder seguir investigando la discrepancia.Re: ¿Cómo se puede obtener el resultado de la comparación directamente sin agregar columnas auxiliares?Veo. Gracias jimRe: ¿Cómo se puede obtener el resultado de la comparación directamente sin agregar columnas auxiliares?Aquí hay otro enfoque. Éste utiliza matrices. Hace algunas suposiciones entre las matrices y las tablas de datos, pero es de esperar que le ofrezca lo suficiente para comenzar si está interesado.
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 ) );Re: ¿Cómo se puede obtener el resultado de la comparación directamente sin agregar columnas auxiliares?Voy a intentar aprender a hacer esta matriz de memoria. ¡Muchas gracias!