¿Cómo elimino filas de números de columnas variables cuando faltan datos?Tengo un conjunto de datos generado automáticamente y algunas de las columnas, aquellas que tienen una subcadena "X_Clean", tendrán algunos valores nulos.A veces hay 2, 3, 4 o incluso 5 columnas diferentes, según el conjunto de datos.Quiero eliminar las filas solo cuando TODAS "n" de estas columnas "X_Clean" tengan valores nulos, pero nunca si al menos una de ellas tiene un valor.
Estaba pensando en hacer un bucle FOR para generar la lista de columnas de interés, y esto funciona.
col_list = dt <<GET column="" names="">0, i--,
if(!contains(col_list[i], "X_Clean"),
remove from(col_list, i);
));</GET>Pero entonces no estoy seguro del próximo paso.Debido a que no puedo hacer otro bucle FOR para cada columna individual, necesito resumir los valores de todas estas columnas y, si es nulo, eliminarlo... ¿o algo más?
Aquí hay un ejemplo de mi tabla, en este caso solo la tercera línea de fecha calificaría para ser eliminada.
| Entidad | 2X_limpio | 3X_limpio | 4X_limpio |
| A | 1 | 3 | 6 |
| B | | 4 | 5 |
| A | | | |
| B | 4 | 1 | 3 |
| A | 3 | 4 | 4 |
| 6 | 1 | 1 | 0 |
Así es como lo habría hecho si pudiera codificar columnas específicas, excepto que no puedo porque varían.
dt << Select Where(Is Missing(:Name( "2X_Clean" ) | :Name( "3X_Clean" ) | :Name( "4X_Clean" )))<<DELETE rows=""></DELETE>
¿Algunas ideas?¡Gracias!
Re: ¿Cómo elimino filas de números de columnas variables cuando faltan datos?Gracias, Jim.
Re: ¿Cómo elimino filas de números de columnas variables cuando faltan datos?Esto es mi culpa.Debería haberme dado cuenta de que una columna que comienza con un número confundiría a JMP.He agregado funciones :Name() alrededor de las referencias a los nombres de las columnas.
dt = Current Data Table();
col_list = dt << get column names( string );
For( i = N Items( col_list ), i > 0, i--,
If( !Contains( col_list[i], "X_Clean" ),
Remove From( col_list, i )
)
);
theExpr = "dt << select where(isMissing(Sum(:name(\!"" || col_list[1];
For( i = 2, i <= N Items( col_list ), i++,
theExpr = theExpr || "\!"),:name(\!"" || col_list[i]
);
theExpr = theExpr || "\!")))==1)<<DELETE rows=""></DELETE>
Re: ¿Cómo elimino filas de números de columnas variables cuando faltan datos?Jim, este es un tema interesante. Cuando abro la tabla de datos, como se adjunta, y ejecuto el siguiente jsl, parece que no puedo eliminar la fila nula. ¿Por qué?
dt = tabla de datos actual () ;
laExpr = "dt << seleccione donde(falta(Suma(:" || col_list [ 1 ] ;
Para ( i = 2 , i <= N artículos ( col_list ) , i ++,
laExpr = laExpr || ",:" || col_list [ i ]
) ;
laExpr = laExpr || "))==1)< ;
evaluar ( Analizar gramaticalmente ( laExpr ) ) ;
Re: ¿Cómo elimino filas de números de columnas variables cuando faltan datos?Todo lo que tiene que hacer es construir una variable de cadena literal que es el código dinámico que necesita ejecutar para lograr lo que desea y luego, una vez construido, ejecutarlo.El siguiente código es una muestra de cómo lo haría
theExpr = "dt << select where(isMissing(Sum(:" || col_list[1];
For( i = 2, i <= N Items( col_list ), i++,
theExpr = theExpr || ",:" || col_list[i]
);
theExpr = theExpr || "))==1)<<DELETE rows=""></DELETE>