Script JSL para filtrar filas enteras donde una columna en particular contiene valores faltantesQuerida comunidad,
Soy un usuario principiante y me gustaría solicitar su amable ayuda con mi siguiente código. El argumento de la función "falta" parece incorrecto.
Me gustaría que el script muestre una tabla donde se muestren las filas que contienen valores en ciertos rangos. Además, se excluirán las filas con celdas vacías en las dos columnas utilizadas para el filtrado.
Aquí va el código:
dt = Current Data Table(); // Assumes you have a data table already opened
// Convert Column1 to numeric data type
dt << As Numeric("Temperatur");
// Convert Column2 to numeric data type
dt << As Numeric("Menge");
// Create the conditions to filter the rows
condition1 = Column(dt, "Temperatur") << Get Values() > 25;
condition2 = Column(dt, "Menge") << Get Values() > 0;
// Create a condition to remove empty cells
condition3 = Any(Is Missing(dt << Get Values("Temperatur"))) == 0 | Any(Is Missing(dt << Get Values("Menge"))) == 0;
// Apply all three conditions to filter the data table
filtered_dt = dt << Select Where(condition1 & condition2 & condition3);
// Show the filtered data table
filtered_dt << Show();
Muchas gracias de antemano por cualquier navegación. Estoy usando JMP versión 17
Miguel
Automatización y secuencias de comandosRe: Script JSL para filtrar filas enteras donde una columna en particular contiene valores faltantesHola Michael.
Lo bueno de JMP: no es necesario que conozcas ningún script, solo puedes usar la GUI y el mouse.
Luego después de ejecutar los pasos, puedes ir al registro avanzado y verificar el código...
- Filas/Selección de filas/Seleccionar dónde (Ctrl + W)

- abrir vista de datos para filas seleccionadas:

- verifique el registro:

Jmp comprende lo que desea e incluso combina los dos pasos en una sola línea de código:

Si desea construir el comando usted mismo, puede definir algunas cadenas, concatenarlas y luego analizar y evaluar el código final:
cond1 = "Is Missing( :age )";
cond2 = ":age > 16";
Eval(Parse("dt << Select where( "|| cond1 || " | " || cond2 || " ) << Data View;"))
Mi sugerencia: invierta algo de tiempo para aprender y comprender el manejo de expresiones
Un excelente tutorial: Uso de JSL para desarrollar aplicaciones sólidas y eficientes (EU 2018 415) por @joseph_morgan
Verás, en realidad es bastante similar a tu enfoque:
almacene algunas condiciones como "símbolos" JSL condición 1, condición 2... luego úselas para construir su expresión final y evaluarla.
Con algunas correcciones de código y Expr() y Name Expr() aquí y allá (para evitar que Jmp evalúe las condiciones antes de que puedan insertarse en la línea final de código), el código debería verse así:
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
condition 1 = Expr(Is Missing( :age ));
condition 2 = Expr(:age > 16 );
combined condition=Expr(or());
Insert into(combined condition, Name Expr(condition1));
Insert into(combined condition, Name Expr(condition2));
Eval(Substitute(dt << Select where( _cond_ ) << Data View),
Expr(_cond_),Name Expr(combined condition)));
Re: Script JSL para filtrar filas enteras donde una columna en particular contiene valores faltantesEstá mezclando la comparación de matrices y la selección de la tabla de datos; en este caso, lo más probable es que desee usar << Seleccionar dónde o << Obtener filas dónde y no << Obtener valores (es posible que desee usar << Obtener filas dónde en su lugar). de << Seleccione Dónde, pero esto depende de lo que desee hacer).
Puede combinar las condiciones directamente en una sola declaración Seleccionar Dónde (si desea separarlas, lo haría con comentarios a menos que desee reutilizar exactamente las mismas declaraciones)
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
dt[[1 2 3 20 30], "height"] = .;
dt[[10 15 16 30], "weight"] = .;
// Comparison
dt << Select Where((:height > 60) & (:weight > 90));
selrows = dt << get selected rows; // to get a matrix of selected row numbers
r = dt << Get Rows Where((:height > 60) & (:weight > 90));
y verificar esos valores faltantes es innecesario en este caso
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
dt[[1 2 3 20 30], "height"] = .;
dt[[10 15 16 30], "weight"] = .;
// Comparison
r1 = dt << Get Rows Where((:height > 60) & (:weight > 90) & (!IsMissing(:height) | !Is Missing(:weight)));
r2 = dt << Get Rows Where((:height > 60) & (:weight > 90));
r1 == r2;Re: Script JSL para filtrar filas enteras donde una columna en particular contiene valores faltantes¡Muchas gracias, Hogi, con tu ayuda lo logré!
Re: Script JSL para filtrar filas enteras donde una columna en particular contiene valores faltantes¡Muchas gracias, Jthi, con tu ayuda lo logré!