JSL: obtenga valores únicos de una columna de la tabla de datosHola,
Actualmente uso el comando de resumen para obtener valores únicos de una columna de la tabla de datos, lo cual en mi opinión es demasiado complicado para esa tarea simple. Creo que tiene que haber un comando más simple que funcione en una columna de una tabla de datos o en un vector, pero no puedo encontrar ninguno. ¿Estoy en lo cierto?
Mi código actual se ve así:
// sample data set:
dt = New Table( "dt" );
dt:"Column 1" << setvalues( [1, 1, 2, 7, 7, 4, 5, 1, 5] );
// use summary to get unique values:
dt_sum = dt << summary( group( :Column 1 ), N, outputtablename( "dt_sum" ) );
unique_values = dt_sum:"Column 1" << getvalues;
dalia
Re: JSL: obtener valores únicosHola, ¿cuál sería el enfoque para usar las claves de la matriz para seleccionar o filtrar filas con las mismas claves, pero en una tabla JMP diferente? Tengo dos mesas. Uno de ellos asigna ID de muestras para pruebas químicas a diferentes configuraciones de factores (temperatura, tiempo, número de estudio, etc.). Obtengo con éxito los ID de muestra en una matriz. (Lo siento, soy un completo novato en esto).
smplID = Associative array(:sampleid) << Get Keys;
Ahora quiero usar estas claves para seleccionar filas en la segunda tabla (donde están mis respuestas), invertir la selección de filas y eliminar las filas. Quizás la solución a continuación, como se describe aquí, es más adecuado para empezar ?
Summarize(dt, smpleID = by(:sampleid));
O tal vez Este enfoque ¿es preferible?
dt << Summary (Group ( :sampleid ), Frequ( "None" ), Weight( "None" );
De todos modos, lo que realmente quiero saber es cómo puedo utilizar cualquiera de estos enfoques para limpiar eficazmente una tabla de datos para las filas que no necesito, antes de continuar con el análisis de datos.
Editar: discutido y resuelto aquí .
Re: JSL: obtener valores únicos de una columna de la tabla de datosIntenta resumir ...
Resumir puede hacer más... consulte los documentos de secuencias de comandos.
Un par de desventajas.
- Aunque la columna resumida puede ser numérica, la lista devuelta contiene valores de caracteres.
- En relación con 1, la precisión de los valores numéricos se trunca según el ancho de la columna.
// sample data set:
dt = newtable("dt");
dt:"Column 1" << setvalues([1, 1, 2, 7, 7, 4, 5, 1, 5]); summarize(unique_values=by(Column 1));
show(unique_values)
Pero... aquí hay una solución para las desventajas:
summarize(unique_values=by(Column 1), unique_numeric_values=(max(Column 1)));
show(unique_values, unique_numeric_values)
Re: JSL: obtener valores únicosEstudie este ejemplo:
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
values = dt:age << Get Values;
array = Associative Array( values );
array << Get Keys;
Re: JSL: obtener valores únicosPodrías intentar Summarize() y luego simplemente recorrer la lista que se devuelve y cambiar los valores de la cadena nuevamente a numéricos usando la función num().
Podrías crear una nueva columna donde uses una fórmula
:variable * 100
y luego convertir los datos a medida que salen de la matriz asociativa
Podrías crear una nueva columna, convirtiendo los valores a caracteres.Re: JSL: obtener valores únicosGracias por esta maravillosa y breve solución @Mark_Bailey .
Generalmente funciona, pero no en el siguiente caso:
values = {0.111, 0.222, 0.333}; // This is actually something like: values = Column(SomeList[1]) << Get Keys
N Items(Associative Array(values)) // gives 1
JMP ignora los decimales al crear la matriz asociativa. (Usando JMP 12)
¿Cómo puedo solucionar esto usando matrices asociativas para que N elementos devuelvan 3 en lugar de 1?
Re: JSL: obtener valores únicos¡Gracias por tu ayuda! ¡Resumir funciona perfectamente!
DaliaRe: JSL: obtener valores únicosTambién:
unique values = Associative Array( col ) << Get Keys
Re: JSL: obtener valores únicosResumir funciona bien si desea mantener los datos en un formato de tabla de datos.
La matriz asociativa sugerida por @Mark_Bailey funciona bien si desea trabajar con listas.Re: JSL: obtener valores únicos de una columna de una tabla de datosProponer una solución resumida para los usuarios de JMP del lado principiante (el mío) del espectro.
En este ejemplo, necesitamos una lista de productos terminados únicos de una lista de pedidos de clientes. No vincularé la tabla y le asignaré un nombre a la tabla de salida.
En la tabla de datos original, vaya a Tablas -> Resumen

Arrastre Terminado bien desde las columnas seleccionadas hasta el Grupo a la derecha.
Asigne un nombre a la tabla de salida, en este caso UniqueFG.
Desmarque la opción Vincular a la tabla de datos original.
Haga clic en Acción Aceptar.

La tabla de datos resultante es una lista de todos los FG únicos y el recuento de filas.
Haga clic en editar script fuente.
Se verá algo como esto.
Data Table( "Test" ) <<
Summary(
Group( :Finished Good ),
Freq( "None" ),
Weight( "None" ),
Link to original data table( 0 ),
output table name( "UniqueFG" )
)
Copia ese código.
Cree un nuevo script en la tabla de datos original y pegue el código. He modificado ligeramente el código para hacerlo más flexible y escalable, y lo he comentado en algunas notas a continuación.
//Creates a list of unique FG #s to feed to SAP to get unit weights and carton quantities
Names Default to Here(1);
dt = current data table();
dt <<
Summary(
Group( :Finished Good ), //this is the column from which you want unique values
Freq( "None" ),
Weight( "None" ),
Link to original data table( 0 ), //this turns off table linking
output table name( "UniqueFG" ) // this is the name of the new datatable
)
Ahorrar.
No dudes en avisarme si este es o no un buen enfoque o estructura de código. ¡Gracias!