Cómo utilizar una columna para "Ordenar valores" en otra columnaQuerida comunidad JMP,
¿Es posible utilizar los valores numéricos (enteros) de una columna como una forma de "ordenar valores" en otra columna?
Tengo una columna de texto que me gustaría ordenar según otra columna que contenga números enteros. Como ejemplo, tengo una columna llamada :Texto y otra llamada :Nivel.

De forma predeterminada, JMP ordena la propiedad de la columna "Orden de valores" como tal:

Preferiría ordenarlo así:

Que, en mi ejemplo simple, tiene el mismo orden que la columna: Nivel. Puedo hacer esto manualmente, por supuesto, pero en mi tabla de datos reales, tengo una columna de texto con varias docenas de entradas que preferiría no hacer manualmente, sino usar la columna: Nivel para establecer la propiedad "Orden de valores". de la columna :Texto.
¿Hay alguna manera de programar esto o hacerlo a través de una GUI dentro de JMP?
¡Gracias!,
DS
Modelado estadístico avanzadoAutomatización y secuencias de comandosLa personalización en masaRe: Cómo utilizar una columna para "Ordenar valores" de otra columnaLa solución aquí es utilizar una matriz asociativa que requiere tener claves únicas. Entonces, si tiene niveles duplicados, parte del texto que tiene se "eliminará" (y supongo que se ordenarán de forma predeterminada).
Re: Cómo utilizar una columna para "Ordenar valores" de otra columnaHola !
Estoy intentando ordenar una columna (lotes) por valores de una columna de fecha numérica, pero tengo un problema cuando se fabricaron dos lotes diferentes el mismo día.
Por ejemplo, ¿por qué esto no se ordenaría correctamente?
dt = New Table("table",
Add Rows(10),
Compress File When Saved(1),
New Column("Text",
Character,
"Nominal",
Set Values({"A", "B", "C", "D", "E", "F", "AA", "BB", "CC", "DD", "EE", "FF"})
),
New Column("Level",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([1, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10])
)
);
El orden de la columna de texto sería el siguiente:
texto nivel
un 1
B 2
re 3
F 4
AA 5
BB 6
CC 7
DD 8
EE 9
FF 10
C 2
mi 3
En lugar de lo deseado:
texto nivel
un 1
B 2
C 2
re 3
mi 3
F 4
AA 5
BB 6
CC 7
DD 8
EE 9
FF 10
C 2
Re: Cómo utilizar una columna para "Ordenar valores" de otra columnaEstoy de acuerdo, @jthi la solución es la mejor.A algunas personas no les gusta JSL.Mucha gente no conoce los niveles de orden de filas.A los usuarios de Excel (próximamente un comentario de generalización) les gustaría tener los niveles de orden de filas como predeterminados.Por tanto, esa es mi motivación para responder a su excelente pregunta de debate.
Re: Cómo utilizar una columna para "Ordenar valores" de otra columnaHola, sí, ahora puedo ver por qué necesitas desmarcar la casilla de verificación de pedido personalizado. Eso tiene sentido. Lo bueno de la forma en que jthi lo hace es que no importa la clasificación de la tabla de datos, mantiene el orden de valores deseado de la columna :Text.Re: Cómo utilizar una columna para "Ordenar valores" de otra columnaCometí un error en mi descripción de qué hacer.A continuación se muestra un ejemplo que utiliza la tabla de datos de Big Class.
- Ordené la tabla de datos por altura.

- Luego entré en la propiedad de la columna Nombre y seleccioné Niveles de orden de filas, Y deseleccioné Orden personalizado

- Luego abrí Graph Builder y arrastré la columna de nombre al eje X y, como puede verse, el orden del eje X es el orden de las filas de los nombres.

Re: Cómo utilizar una columna para "Ordenar valores" de otra columnaHola @jthi ,
Gracias por tus comentarios. Sí, este código JSL es exactamente lo que necesito, ya que puede manejar cualquier disposición extraña de las columnas :Text y :Level y luego asignar el valor ordenando adecuadamente.
No he explorado ni trabajado mucho con el comando de matriz asociativa, ¡pero claramente necesito investigar más sobre eso! Muy bonito, solo 3 líneas de código.
¡Gracias!,
DS
Re: Cómo utilizar una columna para "Ordenar valores" de otra columnaHola @txnelson ,
Gracias por tus comentarios. Lamentablemente, esta solución no funciona con la columna: Texto. Si ordeno la tabla de acuerdo con la columna :Level y luego aplico los "Niveles de orden de filas" como sugiere para el orden de los valores de la columna :Text, aún mantiene el orden alfa de la columna :Text, lo que significa que AA todavía viene después de A y así sucesivamente.
El otro "problema" es que estropea las filas de la tabla de datos original, que actualmente están ordenadas por fecha. Las columnas :Text y :Level pueden estar dispersas a lo largo de las fechas y, a veces, es útil mantener la tabla ordenada por fechas. Realmente no es un gran problema, pero sé que a otros usuarios que luego accederían a la tabla de datos no les gustará.
¡Gracias!,
DS
Re: Cómo utilizar una columna para "Ordenar valores" de otra columnaHola @ron_horne ,
Gracias por tus comentarios. Estoy familiarizado con ese método para hacer un gráfico similar a Pareto en Graph Builder; Lo he usado muchas veces y es bastante útil. Desafortunadamente, estoy haciendo muchas otras evaluaciones con la tabla de datos además de la visualización de datos, por lo que sería útil tener una solución que sea portátil y escalable a tablas con miles de filas y varias docenas de opciones de texto. Aún no he probado los otros dos métodos, pero los intentaré.
¡Gracias!,
DS
Re: Cómo utilizar una columna para "Ordenar valores" de otra columnaAmbos @jthi y @ron_horne proporcionar buenas soluciones.Pero si sólo quieres una forma interactiva de hacer esto, todo lo que tienes que hacer es
- Ordene la tabla de datos por la columna por la que desea que se ordenen los datos.
- Vaya a la propiedad de columna de orden de valores para la columna que desea usar para el orden y seleccione "Niveles de orden de filas

Ahora, cuando use la columna que especificó Niveles de orden de filas como columna de orden, usará el orden en la tabla de datos para esa columna como el orden para mostrar los resultados.
Re: Cómo utilizar una columna para "Ordenar valores" de otra columnaHola @SDF1
Si todo lo que necesitas es usarlo en Graph Builder, puedes ordenar cualquier eje por otro como en la imagen. Incluso puedes cambiar la estadística del ranking. Esto no le ayudará si desea realizar el pedido para realizar pruebas o utilizarlo en otras plataformas de análisis o gráficos.

Lo que hago en la mayoría de los casos es generar un resumen de tabla por la otra variable y ordenarlo. desde allí copio y pego las categorías directamente en el orden de valores. Es un truco que no todo el mundo conoce pero funciona.
ron
Re: Cómo utilizar una columna para "Ordenar valores" de otra columnaNo sé si es posible con GUI, pero puedes crear un script con un par de pasos:
- Primero obtenga la columna de texto ordenada correctamente en la lista
- Agregar propiedad de columna a la columna de Texto con la lista anterior
A continuación se muestra una posible solución que debería funcionar al menos con el ejemplo actual (abra la ventana Registro para ver las impresiones de "depuración"):
Names Default To Here(1);
dt = New Table("table",
Add Rows(10),
Compress File When Saved(1),
New Column("Text",
Character,
"Nominal",
Set Values({"A", "B", "C", "D", "E", "F", "AA", "BB", "CC", "DD"})
),
New Column("Level",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
)
);
//get values from Level and Text into Associative Array
aA_level_text = AssociativeArray(Column(dt, "Level") << Get Values,Column(dt, "Text") << Get Values);
show(aA_level_text); //debug
ordered_level = aA_level_text << Get Values; //Get values (will be ordered by Level)
Show(ordered_level); //debug
Show(Column(dt, "Text") << Get Property("Value Ordering")); //debug
//Add Value Ordering Column Property to Text column
Eval(Eval Expr(
Column(dt, "Text") << Set Property("Value Ordering", Expr(ordered_level));
));
Show(Column(dt, "Text") << Get Property("Value Ordering")); //debug
dt << Clear Column Selection;
Re: Cómo utilizar una columna para "Ordenar valores" de otra columnaVale, lo intentaré
Re: Cómo utilizar una columna para "Ordenar valores" de otra columnaUsar Ranking() para "reordenar" podría funcionar en su caso
Names Default To Here(1);
dt = New Table("table",
Add Rows(10),
Compress File When Saved(1),
New Column("Text", Character, "Nominal", Set Values({"FF", "B", "C", "D", "E", "F", "AA", "BB", "CC", "DD", "EE", "A"})),
New Column("Level", Numeric, "Continuous", Format("Best", 12), Set Values([10, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9, 1]))
);
m_text = Column(dt, "Text") << get values;
m_level = Column(dt, "Level") << get values;
orders = Ranking(m_level);
m_text[orders];
Show(Column(dt, "Text") << Get Property("Value Ordering")); //debug
Eval(Eval Expr(Column(dt, "Text") << Set Property("Value Ordering", Expr(m_text[orders]))));
Show(Column(dt, "Text") << Get Property("Value Ordering")); //debugRe: Cómo utilizar una columna para "Ordenar valores" de otra columna¡Funcionó! ¡Muchas gracias jthi!
Re: Cómo usar una columna para "ordenar por valor" otra columnaResulta curioso que la columna ordinal "edad" no se pueda seleccionar en el menú emergente. ¿Alguna idea de por qué?
Re: Cómo usar una columna para "ordenar por valor" otra columnaPublicaciones similares con soluciones elegantes:
Establecer el orden de los valores o la etiqueta de los valores mediante otra columna a través de una matriz asociativa.
https://community.jmp.com/t5/Discussions/how-to-sort-x-axis-by-another-column-value/mp/442639#M69092 :
Resumen + Índice de clasificación
Re: Cómo usar una columna para "ordenar por valor" otra columnaEn versiones posteriores de JMP, puedes hacerlo, ya que ofrecen la opción "Otro" que te permite seleccionar una columna.