Equivalente de búsqueda de columna única VHola a todos,
He estado usando una fórmula que funciona de la misma manera que BUSCARV en Excel, pero ahora he descubierto que no funciona en tablas de datos más grandes, ya que básicamente ralentiza y mata a JMP.
Se adjunta una tabla de datos de muestra donde he separado las dos funciones que había combinado y que funcionan como se esperaba:

Artículo VLU

Resultado de VLU

Si tomara la fórmula de la columna "Elemento VLU" y la incorporara a la fórmula de Resultados VLU, se produciría una espiral de muerte. Tener dos columnas separadas no es un problema, pero sería más sencillo si pudiera hacerlo en una sola fórmula.
¡¡¡Gracias por cualquier idea!!!
Steve
Combinación y limpieza de datosRe: Equivalente de búsqueda de una sola columna VCon la introducción de la nueva y sofisticada Agregación de columnas, se solucionaron algunos problemas de velocidad en JMP19:
Novedades en Graph Builder para JMP 19
Este también 
Re: Equivalente de búsqueda de una sola columna VOtra forma de realizar una búsqueda vertical en JMP es usar la plataforma Update. Es muy eficiente. Requiere que los valores de búsqueda estén en una tabla aparte; sin embargo, para la tabla de datos, es una operación sencilla. Aquí tienes un script que realiza la búsqueda rápidamente.
Names Default To Here( 1 );
dt = Current Data Table();
// Select matching cells
dt << Select Where( :VALUE_STR == "" );
// Invert current selection
dt << Invert Row Selection;
// Subset data table
// → Data Table( "Subset of Vlookup example" )
dt << Select Where( :VALUE_STR == "" );
dt << Invert Row Selection;
dtSum = dt << Subset(
Selected Rows( 1 ),
columns( :HEADER_ID, :VALUE_STR ),
output table( "Lookup" )
);
// Change column name: VALUE_STR → VLU Result from UPdate
dtSum:VALUE_STR << Set Name( "VLU Result from UPdate" );
// Update data table
dt << Update(
With( Data Table( dtSum ) ),
Match Columns( :HEADER_ID = :HEADER_ID )
);
// Remove Lookup table
Close( dtSum, nosave );
Re: Equivalente de búsqueda de una sola columna V
@shampton82 escribió:
Si tomara la fórmula de la columna "Elemento VLU" y la pusiera en la fórmula Resultados VLU, esto provocaría una espiral de muerte.
En realidad, parece una espiral de muerte, pero si lo analizamos más de cerca, es una espiral de consumo extremo de café.
¡Y le mostrará con qué frecuencia JMP vuelve a calcular las fórmulas de columna!
El problema se debe a que
Col Maximum(if (String comparison ))
Además de abandonar la idea de una fórmula de columna, otras soluciones alternativas para JMP < 19 son:
- DON'T use a string comparison, convert the string to a number:
:VALUE_STR[Col Maximum( If( :X__3 == 3.1, Row(), . ), :HEADER_ID )]
Consejos y trucos: mejores prácticas con JMP/JSL
- ... or use Contiene()
:VALUE_STR[Col Maximum( If( contains(:X__3 , "V3_1"), Row(), . ), :HEADER_ID )]
- DON'T use máximo() to "distribute" a single value in groups
... col mediana() is much faster:
:VALUE_STR[Col Median( If( :X__3 == "V3_1", Row(), . ), :HEADER_ID )]
Re: Equivalente de búsqueda de una sola columna V¡Gracias @txnelson !
Quería mantenerlo como una columna de fórmulas, pero también lo guardaré en mi bolsillo trasero.
Re: Equivalente de búsqueda de columna única V¡Gracias @hogi !
Me gusta más tu analogía. Además, tu sugerencia de usar COLMEDIAN() funcionó a la perfección. Es una locura que ambas funciones tengan rendimientos tan diferentes. Una razón más para esperar con ansias la instalación de la versión 19 pronto.
Re: Equivalente de búsqueda de una sola columna VTambién se me ocurrió una solución basada en una matriz asociativa.
As Constant(
Summarize( bygp = by( :HEADER_ID, :VALUE_STR ) );
aa = Associative Array( bygp[1], bygp[2] );
);
Parse( Eval( Parse( "aa[\!"" || Char( :HEADER_ID[Row()] ) || "\!"]" ) ) );
Re: Equivalente de búsqueda de columna única V¡Guau!
- Resumir con un bidimensional por grupo *)
- ... se introduce en una matriz asociativa para eliminar las entradas faltantes:
Resumir ordena las entradas, la que falta viene primero y se sobrescribe con el segundo par
- Acelerar mediante el uso de una constante
Aún más corto:
As Constant(
Summarize( bygp = by( :HEADER_ID, :VALUE_STR ) );
aa = Associative Array( bygp[1], bygp[2] );
);
aa[Char( :HEADER_ID[Row()] )];
*) importante: resume las cadenas de tiendas (también para columnas numéricas)
-> aa[char( número )]