Cómo lidiar con los datos faltantes<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola,
Necesito ejecutar un análisis descriptivo en una gran cantidad de columnas. Para ello hice el siguiente script:
dt = Tabla de datos actuales ();
column_names = dt << Obtener nombres de columna (numérico, cadena);
for(i=3,i<=NItems(column_names),i++,
colName = column_names ;
cmd = Expr(
caudal = dt << Distribución(
Distribución continua (columna (cName)),
Donde( :SEXO == "F" )
);
owr = ow<
);
Sustituir en (cmd, Expr (cName), colName);
Evaluación(comando);
);
Diario actual() << Guardar HTML(".....\test.htm");
Ahora, cuando lo ejecuto, aparece un mensaje de error en la ventana de registro "Una o más columnas no tienen nada más que valores faltantes".
Tengo algunas columnas en las que faltan datos para todos los valores o solo para "SEXO" específico. ¿Cómo podría verificarlo en mi bucle y omitirlos en el análisis?
Gracias
Re: Cómo lidiar con datos faltantesQuerida Sra,
Este último script funcionó perfectamente. Aprendí mucho en esta discusión.
Gracias de nuevo por toda su orientación.
Re: Cómo lidiar con datos faltantesLa pila es solo un paso intermedio para organizar los datos en una sola columna. El error puede ser que la etiqueta o las columnas de datos no obtengan los nombres "Posición" y "Datos" que asume el comando de resumen aquí. Elimine la opción "invisible" y mire la tabla apilada para ver los nombres de las columnas, y cambie el Resumen en consecuencia si algo no tiene el nombre previsto (como se indica en el comentario jsl sobre el argumento Columna de datos apilados ("Datos") parece ignorarse en JMP 10 si las columnas están agrupadas como en su tabla original, de ahí el comando de desagrupación en mi ejemplo anterior).
En lugar de apilar, si se está comportando mal, puede usar resumen y transposición en tándem para obtener un resultado similar. Pruebe el siguiente ejemplo (funciona con la tabla publicada "Ejemplo").
dt = Tabla de datos ( "Ejemplo" ) ;
nombres_columnas = dt << Obtener nombres de columna ( numérico ) ;
( dt << Resumen (
Grupo ( : SEXO ) ,
Significar ( evaluar ( nombres_columnas ) ) ,
formato de nombre de columna de estadísticas ( "columna" )
)) << Transponer ( Etiqueta ( : SEXO ) , Tabla de salida ( "Resultado" ) ) ;
Re: Cómo lidiar con datos faltantesQuerida Sra,
Muchas gracias por sugerir este nuevo método. Creo que es más rápido y más eficiente. Sin embargo, cuando ejecuto el script, aparece el siguiente error:
Columna no encontrada en acceso o evaluación de 'Bad Argument'
Enviar espera un objeto programable en acceso o evaluación de 'Enviar', dt_stacked << Resumen (Grupo (: Posición), Media (: Datos), Subgrupo (: SEXO))
En el siguiente script, error marcado por /*###*/
::dt = Tabla de datos ("Ejemplo");
::column_names = ::dt << Obtener nombres de columna (numérico);
::dt_apilado = ::dt << Pila(
columnas( ::nombres_columnas),
Columna de etiqueta de origen ("Posición"),
Columna de datos apilados ("Datos"),
invisible
);
::dt_sum = ::dt_stacked << /*###*/Resumen(
Grupo( :Posición ),
Media( :Datos ),
Subgrupo( :SEXO )
) /*###*/;
Columna (3) << establecer nombre ("Mujer");
Columna( 4 ) << establecer nombre( "masculino" );
dt_sum << Nueva columna ("Proporción", Fórmula (Mujer / Hombre));
dt_stacked << cerrar ventana;
Parece que algo no está bien al crear la pila. ¿Tiene alguna idea de por qué se produjo ese error?
Gracias de nuevo por todas sus ayudas.
Re: Cómo lidiar con datos faltantesNo recibo ese mensaje si aplico el script a la tabla de ejemplo publicada anteriormente. Sin embargo, owr[NumberColBox(4)]; da error porque no existe. El código hasta ahora solo da resultados para "F" y no para "M", que supongo que también desea incluir en la tabla de resultados.
Si su único objetivo es resumir significa que usaría la función Resumen () en lugar de recorrer muchos informes de distribución.
Un ejemplo:
dt = Tabla de datos ( "Ejemplo" ) ;
nombres_columnas = dt << Obtener nombres de columnas ( numérico ) ;
dt << Desagrupar columnas ( nombres_columnas ) ; // Aparece un error en JMP 10 con el nombre de la columna de datos apilados y las columnas agrupadas
dt_apilado = dt << Pila (
columnas ( nombres_columnas ) ,
Columna de etiqueta de origen ( "Posición" ) ,
Columna de datos apilados ( "Datos" ) ,
invisible
) ;
dt_sum = dt_apilado << Resumen (
Grupo ( : Posición ) ,
Significar ( : Datos ) ,
Subgrupo ( : SEXO )
) ;
Columna ( 3 ) << escoger un nombre ( "Femenino" ) ;
Columna ( 4 ) << escoger un nombre ( "masculino" ) ;
dt_sum << Nueva columna ( "Relación" , Fórmula ( Femenino / Masculino ) ) ;
dt_apilado << Cerrar ventana ;
Re: Cómo lidiar con datos faltantesCambié los scripts de la siguiente manera:
dt = tabla de datos("Ejemplo") ;
column_names = dt << Obtener nombres de columna (numérico, cadena);
resultados = Nueva tabla ("Resultados", visible,
Nueva columna ("Posición", carácter),
Nueva columna ("Mujer", numérica),
Nueva columna ("Masculino", numérico),
Nueva columna ("Proporción", Fórmula (Femenino/Masculino)),
Agregar filas (NItems (column_names))
);
for(i=1,i<=NItems(column_names),i++,
If( N Fila( dt << obtener filas donde( Y( :SEXO[] == "F", !Falta( Columna( nombres_columnas )[] ) ) ) ),
colName = column_names ;
cmd = Expr(
ow = dt << Distribución (Distribución continua (Columna (cName)),
Donde( :SEXO == "F" ) );
owr = ow<
allmean= owr[NumberColBox(2)];
Fmedia = todasmedias[1];
allmean1= owr[NumberColBox(4)];
Mmedia = todasmedias1[1];
Columna (resultados, 1) = nombreCol;
Columna (resultados, 2) = Fmedia;
Columna (resultados, 3) = Mmedia;
ahora << Cerrar ventana;
);
Sustituir en ( cmd, Expr ( cName ), colName );
Evaluación( cmd );
)
);
resultados << diario;
Ahora recibo este mensaje en la ventana de registro
"no se pudo encontrar la columna{1}
en el acceso o evaluación de 'Column', Column( column_names )"
y se refiere a esta línea:
":SEXO[] == "F" & !Falta (Columna/*###*/(::nombres_de_columna[::i])[] )"
gracias por los consejos
Re: Cómo lidiar con datos faltantesCreo que el error es causado por fuera de lugar
dt = tabla de datos actual()
Asigna la nueva tabla "Resultados" en lugar de su tabla original a dt. Y los resultados no tienen una columna llamada: SEXO
Pruebe dt = tabla de datos ("Ejemplo") en su lugar.
Re: Cómo lidiar con datos faltantesQuerida Sra,
Gracias por tu orientación. Agregué sus códigos sugeridos y modifiqué mi secuencia de comandos para exportar los resultados a una tabla de la siguiente manera:
resultados = Nueva tabla ("Resultados", visible,
Nueva columna ("Posición", carácter),
Nueva columna ("Mujer", numérica),
Nueva columna ("Masculino", numérico),
Nueva columna ("Proporción", Fórmula (Femenino/Masculino)),
Agregar filas (NItems (column_names))
);
dt = Tabla de datos actuales ();
column_names = dt << Obtener nombres de columna (numérico, cadena);
for(i=1,i<=NItems(column_names),i++,
If( N Fila( dt << obtener filas donde( Y( :SEXO[] == "F", !Falta( Columna( nombres_columnas )[] ) ) ) ),
colName = column_names ;
cmd = Expr(
ow = dt << Distribución (Distribución continua (Columna (cName)),
Donde( :SEXO == "F" ) );
owr = ow<
allmean= owr[NumberColBox(2)];
Fmedia = todasmedias[1];
allmean1= owr[NumberColBox(4)];
Mmedia = todasmedias1[1];
Columna (resultados, 1) = nombreCol;
Columna (resultados, 2) = Fmedia;
Columna (resultados, 3) = Mmedia;
ahora << Cerrar ventana;
);
Sustituir en ( cmd, Expr ( cName ), colName );
Evaluación( cmd );
)
);
resultados << diario;
Ahora, cuando lo ejecuto, me da un error de SEXO. Adjunté un ejemplo de mi archivo de datos para la prueba.
Gracias de antemano por tu ayuda.
Re: Cómo lidiar con datos faltantesHay varias formas de hacerlo (como siempre). A continuación se muestra un enfoque que debería funcionar.
dt = Tabla de datos actual () ;
nombres_columnas = dt << Obtener nombres de columnas ( numérico , Cadena ) ;
Para ( i = 3 , i <= N artículos ( nombres_columnas ) , i ++,
// si no falta en la columna i donde SEX="F" > 0, haz cosas, de lo contrario sigue i
Si ( Fila N ( dt << obtener filas donde ( Y ( : SEXO [] == "F" , ! Está perdido ( Columna ( nombres_columnas [ i ] )[] ) ) ) ) ,
colName = nombres_columnas [ i ] ;
cmd = exp. (
Ay = dt << Distribución ( Distribución Continua ( Columna ( cNombre ) ) , Dónde ( : SEXO == "F" ) ) ;
ahora = Ay << informe ;
) ;
Sustituir en ( cmd , exp. ( cNombre ) , colName ) ;
evaluar ( cmd ) ;
)
) ;
Revista actual () << Guardar HTML ( ".....\prueba.htm" ) ;