Eliminar filas que están vacías en todas las columnas de una listaResuelto: Re: Eliminar filas con uno o más valores vacíos usando JSL - Página 2 - Comunidad de usuarios de JMP
En base a la discusión anterior, tengo un script para eliminar filas vacías, pero parece eliminar aquellas en las que están vacías en CUALQUIERA de las columnas enumeradas, mientras que quiero eliminar aquellas en las que TODAS las columnas enumeradas están vacías.
Gracias
// Get the current data table
dt = Current Data Table();
// Get all column names as strings
cnmes = dt << Get Column Names("string");
// Initialize Start and End indices
Start = .;
End = .;
// Find the index of the "Start" column
For(i = 1, i <= N Items(cnmes), i++,
If(Contains(cnmes[i], "Start"),
Start = i + 1;
Break(); // Exit loop once found
);
);
// Find the index of the "End" column
For(j = 1, j <= N Items(cnmes), j++,
If(Contains(cnmes[j], "End"),
End = j-1;
Break(); // Exit loop once found
);
);
datacols = {};
For(k = start, k <= End, k++,
Insert into (datacols, cnmes[k]) // Determine Data Columns
);
keeprows = Loc Nonmissing( datacols );
dt << select rows( keeprows ) << invert Row Selection << delete rows;
Automatización y scriptingRe: Eliminar filas que están vacías en todas las columnas de una lista¿Has estudiado JSL lo suficiente para entender por qué no hace lo que necesitas que haga?
Eche un vistazo a la Guía de secuencias de comandos en Seleccionar dónde
Necesitará encontrar todas las filas que tengan valores faltantes para la primera columna en datacols y luego, de esa lista de filas, seleccionar las filas que tengan valores faltantes para la segunda columna, luego la tercera, etc. hasta llegar a la última columna en la lista datacols.
Las filas que queden después de eso serán solo aquellas filas con valores faltantes para todas las columnas en datacols.
Luego todo lo que tienes que hacer es eliminar las filas restantes.
Examine el elemento Selección actual() de la función Seleccionar dónde(). Esto restringirá cada selección posterior para que solo vea las filas previamente seleccionadas al aplicar la selección.
Re: Eliminar filas que están vacías en todas las columnas de una listaJim
Creo que lo entiendo, nació para fracasar. ¡Pero tu idea es genial! Así es como se ve.
dt = Current Data Table();
// Get all column names as strings
cnmes = dt << Get Column Names("string");
// Initialize Start and End indices
Start = .;
End = .;
// Find the index of the "Start" column
For(i = 1, i <= N Items(cnmes), i++,
If(Contains(cnmes[i], "Start"),
Start = i + 1;
Break(); // Exit loop once found
);
);
// Find the index of the "End" column
For(j = 1, j <= N Items(cnmes), j++,
If(Contains(cnmes[j], "End"),
End = j-1;
Break(); // Exit loop once found
);
);
For(l = Start, l <= End, l++,
full_rows = dt << get rows where( !Is Missing( As Column(cnmes[l]) ) );
For Each Row(If(is missing(cnmes[i]), Remove From(full_rows))));
dt << Select Rows(full_rows) << Invert Row Selection << Delete Rows;Re: Eliminar filas que están vacías en todas las columnas de una lista¿Funciona esto? No entiendo cómo. Estás tratando cada columna de forma independiente. Estás restableciendo filas completas para cada columna.
Aquí hay un ejemplo del uso de selección múltiple where()_para limitar las filas que desea seleccionar
names default to here(1);
dt =
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Big Class.jmp" );
// Select all males
dt << select where( :Sex == "M");
// From all of the selected males, select all of the 12 year olds
dt << select where( :age == 12, Current Selection("Restrict"));Re: Eliminar filas que están vacías en todas las columnas de una listaNo estoy exactamente seguro de qué está pasando en la primera parte del script o cómo se relaciona con esta pregunta (¿crear una lista de columnas?) pero puedes hacer esto: usando la plataforma JMP (patrón de datos faltante), seleccionar dónde (como sugirió Jim) o por ejemplo con subíndices de tabla de datos + bucle / subíndices de tabla de datos + algunas operaciones de matriz.
Primero, probaría con la plataforma de datos faltantes que ofrece JMP. Verificaría si se puede usar para esto (sí se puede). Después, revise la opción "Seleccionar dónde" que sugirió Jim. Una vez que haya escrito el script y comprendido cómo funciona la sugerencia de Jim, puede comenzar a explorar las opciones de suscripción a tablas de datos que sugiero a continuación si aún desea hacerlo.
Patrón de datos faltantes
Uso de JMP > Ingresar y editar sus datos > Organizar datos en tablas de datos > Ver patrones de datos faltantes en tablas de datos
Guía de scripts > Tablas de datos > Scripts avanzados de tablas de datos > Encontrar patrones de datos faltantes


Esto utiliza operaciones matriciales y creo que debería funcionar.
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(11),
Compress File When Saved(1),
New Column("Column 1", Character, "Nominal", Set Values({"", "", "aa", "", "a", "a", "", "a", "", "a", ""})),
New Column("Column 2", Character, "Nominal", Set Values({"", "a", "a", "a", "a", "", "", "a", "a", "", ""})),
New Column("Column 3", Character, "Nominal", Set Values({"a", "", "a", "", "a", "", "a", "", "", "", "a"}))
);
cols_to_check = {"Column 2", "Column 3"};
m = Matrix(IsMissing(dt[0, cols_to_check]));
rows_to_delete = Loc(V Sum(m`) == 2);
dt << select rows(rows_to_delete); // for demo purposes
dt << Delete Rows(rows_to_delete); // use this in real use case
Esto recorrería las filas mientras verificaba si faltaban valores.
rows_to_delete = {};
For Each Row(dt,
m = Loc Nonmissing(dt[Row(), cols_to_check]);
If(N Items(m) == 0,
Insert Into(rows_to_delete, Row());
);
);
dt << Select Rows(rows_to_delete);
Re: Eliminar filas que están vacías en todas las columnas de una listafalta (lista) y falta (matriz)
¡Qué bonito! - y qué inesperado.


¿Existe una descripción general de qué funciones JSL se pueden "vectorizar"?
Re: Eliminar filas que están vacías en todas las columnas de una listaPensé que el script funcionaba, pero tiene un fallo, como señalas. Probé la idea de @Jarmo y funciona, pero no me permite rellenar la matriz.
// Get the current data table
dt = Current Data Table();
// Get all column names as strings
cnmes = dt << Get Column Names("string");
// Initialize Start and End indices
Start = .;
End = .;
// Find the index of the "Device 2" column
For(i = 1, i <= N Items(cnmes), i++,
If(Contains(cnmes[i], "Device 2"),
Start = i + 1;
Break(); // Exit loop once found
);
);
// Find the index of the "Process Script" column
For(j = 1, j <= N Items(cnmes), j++,
If(Contains(cnmes[j], "start_date"),
End = j-1;
Break(); // Exit loop once found
);
);
datacols = {};
For(k = start, k <= End, k++,
Insert into (datacols, cnmes[k]) // Determine Data Columns
);
m = Matrix(IsMissing(dt[0, datacols]));
rows_to_delete = Loc(V Sum(m`) == 2);
dt << select rows(rows_to_delete); // for demo purposes
dt << Delete Rows(rows_to_delete); // use this in real use case
Re: Eliminar filas que están vacías en todas las columnas de una lista¿Tus columnas de datos incluyen lo que buscas? Además, debes ajustar las 2 para que se ajusten a tus datos, con opciones dinámicas como...
rows_to_delete = Loc(V Sum(m`) == N Items(cols_to_check));
Podría ser una buena idea
Re: Eliminar filas que están vacías en todas las columnas de una listaJarmo
Eso funcionó. De hecho, me preguntaba el significado del 2.
Gracias