encontrando el modo<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola a todos,
Me gustaría producir una tabla de verano que da el modo de una variable para cada categoría de otra variable.
Idealmente, esto funcionaría:
dt = abierto ("$ SAMPLE_DATA / Mail Messages.jmp");
dt << resumen (Grupo (: De), Modo (: Hasta));
alternativamente, apilaría la tabla por "De" y calcularía el modo en cada fila. sin embargo, "Modo" no es una opción en el resumen de la tabla o en la fórmula de columna.
Cualquier idea que calcule el modo es bienvenida, incluso en el envío a SAS.
Estoy usando JMP 10.
gracias,
Ron
Re: encontrando el modo<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Gracias brady
Este es, con mucho, el guión más parsimonioso y robusto.
Me gustaría agregar una línea de código opcional para deshabilitar la posibilidad de que falten valores como el modo:
dt = abierto ("$ SAMPLE_DATA \ Cars.jmp");
dt2 = dt << resumen (grupo (: Marca,: R Leg));
// Opción para deshabilitar la posibilidad de valores perdidos como modos.
dt2 << Seleccione Where (IsMissing (: R Leg)) << Delete Rows;
dt2 << selectwhere (colmaximum (: n rows,: make)! =: n rows) << Delete Rows;
Re: encontrando el modo<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Muchas gracias.
al tratar con el modo me encontré con dos problemas que parecen fallas del programa JMP.
1. Si solo hay una observación, la plataforma de distribución no proporciona ningún modo. Además, en caso de una frecuencia vinculada de 1 tampoco se devuelve nada. esto significa que la definición en el archivo de ayuda es incorrecta cuando se clama para traer el valor más bajo entre los más frecuentes.

2. cuando se produce una tabla de Frecuencias para que el ancho de la columna sea largo (es decir, 12), hacer una tabla de datos no permite recuperar el número entero. por alguna razón produce una cadena de texto del número abreviado.

Re: encontrando el modo<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />No estoy seguro de si esto es útil, pero en el intercambio de archivos JMP, Brady Brady ha publicado un complemento que brinda una capacidad de estadísticas de resumen ampliadas, incluido el Modo.
http://support.sas.com/demosdownloads/downarea_t4.jsp?productID=111731&jmpflag=Y

Re: encontrar el modo<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Muchas gracias MS. es muy útil.
Esta forma es en realidad más "honesta" que otras alternativas mencionadas en esta discusión, ya que también evalúa la frecuencia de los datos faltantes. por ejemplo, ejecutar el siguiente script devuelve algunos valores faltantes como modo.
dt = abierto ("$ SAMPLE_DATA \ Cars.jmp");
mode_by_groups = Función ({collist}, // lista de nombres de columna
// Modo de búsqueda de la última columna en collist
Resumir (g = por (Eval (collist)), n = Count ());
X = Diseño (g [1]): * n;
i = Loc (V Max (Transposición (X == Repetir (V Max (X), N Fila (n)))));
// Agregar columnas de agrupación a la nueva tabla
dt11 = Nueva tabla ("modos");
Para (k = 1, k <= N elementos (collist) - 1, k ++,
dt11 << (Nueva columna (char (collist), Carácter, establecer valores (g )));
);
// Añadir modo y N
dt11 << Nueva columna ("Modo de" || char (collist), Carácter, establecer valores (g ));
dt11 << Nueva columna ("N", establecer valores (n ));
);
mode_by_groups ({Make, R Leg});

Re: encontrar el modo<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Creo que esto también producirá el resultado deseado:
dt = abierto ("$ SAMPLE_DATA \ Cars.jmp");
dt2 = dt << resumen (grupo (: Make,: R Leg));
dt2 << selectwhere (colmaximum (: n filas,: make)! =: n filas) << Eliminar filas;
Salud,
Brady
Re: encontrar el modoHola-El modo es el elemento más común,Entonces, estás buscando a la persona ( o presumiblemente a las personas si hay un empate ) que recibió la mayor cantidad de cartas de cada remitente.,¿Es correcto? Si es así,Creo que lo siguiente debería funcionar, aunque no dudo de que exista una forma mucho más elegante y/o más corta. He dejado deliberadamente todos los cálculos intermedios.,y nombró todas las tablas para dejar un registro de auditoría:
dt1= abierto ("$SAMPLE_DATA/Mensajes de correo.jmp");
dt1<<nombre del conjunto ("dt1");
dt2=dt1<<Resumen ( Grupo (:De ), N,Subgrupo (:A ) );
dt2<<nombre del conjunto ("dt2");
Enviado desde=( dt2<<obtener los nombres de las columnas );
espectáculo(Enviado desde );
// Descarta los dos primeros elementos de esta lista;
eliminar de(Enviado desde, {1, 2});
espectáculo(Enviado desde );
// Apilarlos;
dt3=dt2<<Pila ( columnas (evaluar(Enviado desde )), Columna de etiqueta de origen ("Etiqueta" ), Columna de datos apilados ("Datos" ));
dt3<<nombre del conjunto ("dt3");
// dt3 ahora contiene el número de cartas enviadas por cada persona a cada destinatario;
dt4=dt3<<Resumen ( Grupo (:De ), Máximo( :Datos ) );
dt4<<nombre del conjunto ("dt4");
// dt4 ahora contiene el número máximo de cartas enviadas por cada persona a cualquier destinatario;
dt5=dt4<<Unir ( Con ( dt3 ),
SeleccionarCon ( : Desde , : Etiqueta , : Datos ) ,
Por columnas coincidentes (:De= :De, :Nombre ("Máx.(Datos)" ) = :Datos ),
Eliminar múltiplos (0, 0 ),
Nombre ( "Incluir no coincidencias" )( 0 , 0 ) ,
Conservar el orden de la tabla principal (1 )
);
dt5<<nombre del conjunto ("dt5");
columna(dt5, "Etiqueta") <<nombre del conjunto ("Beneficiario");
/*
dt5 ahora debe contener el número máximo de cartas enviadas desde cada persona a cualquier destinatario
y el nombre de ese destinatario (o destinatarios en caso de empate)
*/
Esto debería indicar que Ann envió 4 cartas a Michael, Jeff 7, John 12, Katherine 12, y así sucesivamente. ¿Te gustaría probarlo y ver si funciona? Para obtener el máximo número de cartas recibidas por cada destinatario de un mismo remitente, simplemente intercambia las columnas "Para" y "De".
Re: encontrar el modoGracias Dodo,
Funciona bien.
Re: encontrar el modoHola Dodo y todos,
La solución de Dodo es técnicamente correcta pero no es útil cuando se trabaja con grandes cantidades de datos.
Pensándolo bien, tengo una solución alternativa que es escalable.
dt1 = Open( "$SAMPLE_DATA/Mensajes de correo.jmp" );
dt1 << establecer nombre( "dt1" );
// producir una distribución de receptores por remitente
dt1 << New Script( "Distribución", Distribución( Distribución nominal( Columna( :Hasta ) ), Por( :Desde ) ) );
Dist = Dt1 << Ejecutar Script( "Distribución" );
// extrae las tablas de frecuencia como una sola tabla de datos.
dt2 = Report( dist[1] )["Frecuencias"][Cuadro de tabla( 1 )] << Crear tabla de datos combinados;
dt2 << establecer nombre( "dt2" );
dist << cerrar ventana;
// eliminar las filas "Total" de la tabla de datos - no representan frecuencias relevantes
selección = dt2 << Seleccionar Donde( :Nivel == "Total" );
selección << Eliminar filas;
// resumir para obtener el modo "Hasta" para cada "Desde"
dt3 = Tabla de datos( "dt2" ) << Resumen( Grupo( :Desde ), Máx( :Contar ), formato de nombre de columna de estadísticas( "columna" ), Enlace a la tabla de datos original( 0 ) );
dt3 << Establecer nombre( "Modo" );
// actualiza la tabla de resumen para obtener los valores de "Para"
dt3 << Actualizar( Con( Tabla de datos( "dt2" ) ), Coincidir columnas( :From = :From, :Count = :Count ), Agregar columnas de Actualizar tabla( :Level ) );
dt2 << cerrar ventana;
Columna(dt3, "Nivel") << Establecer Nombre("Modo");
Re: encontrar el modoA menudo hay varias maneras de realizar una tarea en JMP. Acabo de recordar una función que escribí hace tiempo y que es bastante eficiente para encontrar el elemento más común agrupado por una o más columnas. La comparto aquí como alternativa a los enfoques anteriores. El resultado es similar al de Dodo; es decir, se devuelven todos los modos "empatados", no solo el último, como en el enfoque de Ron con update().
mode_by_groups = Función ( { collist } , // lista de nombres de columnas
// Buscar el modo de la última columna en la lista de colisiones
Resumir ( g = por ( Evaluar ( collist ) ) , n = Contar () ) ;
X = Diseño ( g [ 1 ] )
n ;
i = Lugar ( V Máx. ( Transposición ( X == Repetir ( V Máx. ( X ) , N Fila ( n ) ) ) ) ) ;
//Agregar columnas de agrupación a la nueva tabla
dt1 = Nueva Tabla ( "modos" ) ;
Para ( k = 1 , k <= N elementos ( lista de colectas ) - 1 , k ++,
dt1 << ( Nueva columna ( carbonizarse ( collist [ k ]) , Carácter , establecer valores ( g [ k ][ i ] ) )) ;
);
//Agregar modo y N
dt1 << Nueva columna( "Modo de" || carbonizarse(collist[k]), Character, set values( g[k][i] ) );
dt1 << Nueva columna( "NORTE", set values( n[i] ) );
);
//Ejemplos
Abrir ( "$SAMPLE_DATA/Mensajes de correo.jmp" ) ;
modo_por_grupos ( { Desde , Hasta } ) ;
Abierto( "$SAMPLE_DATA/Consumer Preferences.jmp" );
mode_by_groups ( { Género , Estado civil , Año de nacimiento } ) ;