¿Optimizar una declaración IF?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Tengo una lista de valores específicos que me interesa identificar en mi conjunto de datos (valores específicos de la columna:MeasurementGroup).Creé una nueva columna llamada "¿Valor de interés?" con una fórmula para generar un indicador: SÍ o NO
dt1 << Nueva columna( "¿Valor de interés?",
Personaje,
Nominal,
Fórmula( Si(
:MeasurementGroup == "A", "SÍ",
:Grupo de Medición == "B", "SÍ",
:Grupo de Medición == "C", "SÍ",
:Grupo de Medición == "D", "SÍ",
:Grupo de Medición == "E", "SÍ",
:Grupo de Medición == "F", "SÍ",
:MeasurementGroup == "G", "SÍ",
:MeasurementGroup == "AA", "SÍ",
:MeasurementGroup == "BB", "SÍ",
:Grupo de Medición == "CC", "SÍ",
:MeasurementGroup == "ZZ", "SÍ",
:Grupo de Medición == "ABC", "SÍ",
:MeasurementGroup == "DEC", "SÍ",
:MeasurementGroup == "WSA", "SÍ",
:MeasurementGroup == "RSS", "SÍ",
:MeasurementGroup == "DVC", "SÍ",
:MeasurementGroup == "SFS", "SÍ",
:MeasurementGroup == "AAZ", "SÍ",
:MeasurementGroup == "ZZA", "SÍ",
:MeasurementGroup == "TTT", "SÍ",
"NO") )
);
Mi tabla de datos tiene cerca de 1 millón de filas... y parece agitarse un poco antes de completarse.¿Existe una forma más eficiente de lograr el mismo resultado?
¡Cualquier ayuda es muy apreciada! gracias
Re: ¿optimizar una declaración IF?Gracias Peter, usaré este truco de ahora en adelante cuando publique.
Salud,
Brady
Re: ¿optimizar una declaración IF?¡Se ve bien Brady!
Por cierto, cuando publico código, copio/pego el JSL en un documento de Word y luego copio/pego desde allí en el foro.Eso conserva el aspecto del editor JSL.
Por ejemplo:
dt << Nueva columna ( "t/n 2" ,
fórmula (
Contiene ( { "A" , "B" , "C" , "D" , "MI" , "F" , "GRAMO" , "AUTOMÓVIL CLUB BRITÁNICO" , "CAMA Y DESAYUNO" , "CC" , "ZZ" , "A B C" , "DIC" , "WSA" ,
"RSS" , "DVC" , "FSS" , "AZ" , "ZZA" , "TTT" } , : Grupo de medición
) != 0
) ,
) ;
Re: ¿optimizar una declaración IF?Hola JMPBeginner,
**** Consulte el archivo .jsl adjunto para ver estos scripts según lo previsto. He tenido problemas para que mis publicaciones se muestren correctamente y si copias, pegas o escribes los scripts que aparecen a continuación, no estoy seguro de si funcionarán. Parecen incorrectos cuando los publico, pero se ven bien cuando los edito, por lo que no estoy seguro de qué hacer excepto adjuntar un archivo de script. ¡Mis disculpas!
*****
Si está dispuesto a utilizar etiquetas de valor (para tablas grandes, esto también puede ahorrar una buena cantidad de espacio en el disco), tiene otro par de opciones rápidas:
1) Un enfoque basado en fórmulas que utiliza la función Contiene():
dt << Nueva columna( "y/n 2",
fórmula(
Contiene(
{"A", "B", "C", "D", "E", "F", "G", "AA", "BB", "CC", "ZZ", "ABC", " DEC", "WSA", "RSS", "DVC", "SFS", "AAZ", "ZZA", "TTT"},
:Grupo de medición
) != 0
),
<
);
2) Un enfoque no basado en fórmulas: JMP trabaja con tablas muy rápidamente; La velocidad de este enfoque me sorprendió un poco, dado que se debe crear y cerrar una tabla completamente nueva:
dt = Tabla de datos actual();
dt2 = Nueva Tabla( "mt", invisible );
Columna (dt2, 1) << tipo de datos (carácter) << nombre del conjunto ("Grupo de medición") << valores del conjunto (
{"A", "B", "C", "D", "E", "F", "G", "AA", "BB", "CC", "ZZ", "ABC", " DEC", "WSA", "RSS", "DVC", "SFS", "AAZ", "ZZA", "TTT"}
);
dt2 << Nueva columna( "s/n", <
dt << Nueva columna( "s/n", <
dt << Actualizar (con (dt2), hacer coincidir columnas (: grupo de medición =: grupo de medición), agregar columnas de la tabla de actualización (ninguna));
Columna (dt, "y/n") << Agregar propiedades de columna (etiquetas de valor ({0, 1}, {"NO", "SÍ"}));
Cerrar( dt2, nosguard );
En una tabla de un millón de filas, obtenía tiempos de ejecución de ~ 2,4 segundos para la función Coincidir. (La computadora de MS parece ser más rápida que la mía;)
Los tiempos de ejecución del método 1 anterior fueron de ~ 0,8 segundos, mientras que los tiempos de ejecución del método 2 fueron de ~ 0,4 segundos.
Salud,
Brady
Re: ¿optimizar una declaración IF?Jim, ¡gracias por la rápida respuesta! ¡Pude implementar la función LOC y ver una mejora inmediata en la velocidad!
MS, ¡gracias por mejorar esto aún más y enseñarme la función MATCH (y brindarme la comparación de velocidades)!
Re: ¿optimizar una declaración IF?¡Dale un premio a este hombre!Esto es genial.
Re: ¿optimizar una declaración IF?La función Coincidir es efectiva para múltiples opciones. Hice una prueba rápida: con un millón de filas. Fósforo , ubicación y Si completar en 2,1 segundos, 6,9 segundos y 10,2 segundos, respectivamente.
dt << Nueva columna ( "Valor de interés" ,
Personaje ,
Nominal ,
Fórmula (
Fósforo ( : Grupo de medición ,
"A" , "SÍ" ,
"B" , "SÍ" ,
"C" , "SÍ" ,
"D" , "SÍ" ,
"MI" , "SÍ" ,
"F" , "SÍ" ,
"GRAMO" , "SÍ" ,
"AUTOMÓVIL CLUB BRITÁNICO" , "SÍ" ,
"CAMA Y DESAYUNO" , "SÍ" ,
"CC" , "SÍ" ,
"ZZ" , "SÍ" ,
"A B C" , "SÍ" ,
"DIC" , "SÍ" ,
"WSA" , "SÍ" ,
"RSS" , "SÍ" ,
"DVC" , "SÍ" ,
"FSS" , "SÍ" ,
"AZ" , "SÍ" ,
"ZZA" , "SÍ" ,
"TTT" , "SÍ" ,
"NO"
)
)
) ;
Re: ¿optimizar una declaración IF?Intentaría usar la función LOC()
if(N filas(Loc({"A","B","C",...............},Grupo de medición))>0,"Sí","NO" )