Tabular todas las columnas numéricas en una tablaHola,
Estoy tratando de crear una tabla tabulada que contenga todas las columnas numéricas (y luego otra con las categóricas).
Intenté ejecutar esto pero no funciona.
¿Cualquier sugerencia?
AIT
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
NumericCols = {};
for(i = 1, i <= N Cols(dt), i++,
Col = Column(dt,i);
ColDataType = Col << Get Data Type;
If( ColDataType == "Numeric",
Insert Into(NumericCols,Col << Get Name);
);
);
Tabulate(
Set Format( Uniform Format( 10, 2 ) ),
Add Table(
Column Table( Statistics( N ) ),
Column Table( Statistics( Mean ) ),
Column Table( Statistics( Std Dev ) ),
Column Table( Statistics( Min ) ),
Column Table( Statistics( Max ) ),
Column Table( Statistics( Median ) ),
Row Table(
Analysis Columns(
NumericCols = {}
)
)
)
)Re: Tabular todas las columnas numéricas de una tablaPD.
Reescribí este código para trabajar en columnas continuas en lugar de numéricas. Esto se adapta mejor a mis necesidades, ya que tengo varias columnas que, de hecho, son nominales pero tienen datos numéricos y etiquetas de valor.
Aquí está el código final que usé.
Names Default To Here( 1 );
dt = currentdatatable();
continuousCols /*NumericCols */ = dt << get column names( continuous /*numeric*/ );
dt << Tabulate(
Set Format( Uniform Format( 10, 2 ) ),
Show Control Panel( 0 ),
Add Table(
Column Table( Statistics( N ) ),
Column Table( Statistics( Mean, Std Dev ) ),
Column Table( Statistics( Min, Max ) ),
Column Table( Statistics( Median ) ),
Row Table( Analysis Columns( Eval( continuousCols /*NumericCols */ ) ) )
)
);
¡Muchas gracias por tu ayuda!
Re: Tabular todas las columnas numéricas de una tablaAquí hay un método para hacer lo que quieras.
dt = Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
CharacterCols = dt << get column names( nominal );
// Build a string variable that contains the required JSL
theExpr =
"dt << Tabulate(
Show Control Panel( 0 ),
Add Table(
Column Table( Statistics( N, Name( \!"% of Total\!" ) ) ),";
For( i = 1, i <= N Items( CharacterCols ), i++,
theExpr = theExpr ||
"Row Table( Grouping Columns( " || char(CharacterCols[i]) || ") ),";
);
theExpr = theExpr || "));";
// Execute the JSL
eval(parse(theExpr));
Otros miembros de la comunidad pueden tener un método mejor
Re: Tabular todas las columnas numéricas de una tablaGracias de nuevo por aguantarme. El segundo código que enviaste todavía no da los resultados que necesito.
Vea a continuación los resultados que estoy tratando de obtener, que es el resultado del código que publiqué en la publicación anterior, seguido de los resultados que obtengo de su código.
Esto es lo que me gustaría conseguir:

Esto es lo que obtengo usando el código publicado:

AIT
Re: Tabular todas las columnas numéricas de una tablaEl problema no está en el código Tabulate.El código Tabulate que le proporcioné funcionará bien.El problema es con la configuración de las columnas para estar en la tabla.En el último código que te envié, la instrucción
CharacterCols = dt << get column names( character );
coloque en la lista CharacterCols, todas las columnas de la tabla de datos que eran del tipo de datos Carácter.Y Tabulate funcionó correctamente con las columnas Lot_id, Wafer ID en Lot ID.Esas son las únicas 2 columnas en la tabla de datos que son del tipo de datos de caracteres.Fue mi malentendido que su solicitud de variables de clasificación incluidas en la segunda tabla, significaba columnas de caracteres.Pero con su corrección de que la clasificación debe incluir la oblea y el sitio en la tabla, requiere que la lista de columnas de CharacterCols se genere de manera diferente.Lo que cubrirá todas las columnas que desee es cargar esa lista con todas las columnas con el tipo de modelado "Nominal".Por lo tanto, un simple cambio de la declaración a
CharacterCols = dt << get column names( nominal );
Se colocará en la lista CharacterCols, {lot_id, oblea, ID de oblea en ID de lote, SITIO};
El JSL modificado está debajo
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
CharacterCols = dt << get column names( nominal );
dt << Tabulate(
Set Format( Name( "% of Total" )(9, 0) ),
Show Control Panel( 0 ),
Add Table(
Column Table( Statistics( N, Name( "% of Total" ) ) ),
Row Table( Grouping Columns( eval( CharacterCols ) ) )
)
);
Re: Tabular todas las columnas numéricas de una tablaGracias por la respuesta, pero el código que publicaste no me proporciona la tabla que necesito.
aquí está el código, para el archivo de datos examole que usó, lo que me daría la tabla que necesito.
Notará que la salida es diferente.
Tabulate(
Add Table(
Column Table( Statistics( N, Name( "% of Total" ) ) ),
Row Table( Grouping Columns( :lot_id ) ),
Row Table( Grouping Columns( :wafer ) ),
Row Table( Grouping Columns( :Wafer ID in lot ID ) ),
Row Table( Grouping Columns( :SITE ) )
)
);
La razón por la que asumí que hay una diferencia es que aquí cada tabla de filas se indica por separado, pero en los datos numéricos todos estaban bajo el mismo
"Tabla de filas (columnas de análisis("
y luego una lista de los nombres de las columnas separados por una coma.
Esto me llevó a pensar que para los números podría usar una lista simple pero no para el personaje.
Gracias por la referencia a la Guía de secuencias de comandos ¡Definitivamente debería encontrar el tiempo para estudiarlo!
Re: Tabular todas las columnas numéricas de una tablaLa sintaxis de tabular es NO totalmente diferente, de hecho es idéntico excepto por las palabras "Columnas de análisis" cambiadas a "Columnas de agrupación".
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
CharacterCols = dt << get column names( Character );
dt << Tabulate(
Set Format( Name( "% of Total" )(9, 0) ),
Show Control Panel( 0 ),
Add Table(
Column Table( Statistics( N, Name( "% of Total" ) ) ),
Row Table( Grouping Columns( eval( CharacterCols ) ) )
)
);
Me gustaría saber, ¿qué te hizo pensar que la sintaxis era drásticamente diferente?Supongo que está ejecutando de forma interactiva una tabulación de muestra para las columnas de análisis, y luego JMP le proporciona el JSL para la muestra que ejecutó, y luego repite lo mismo para las columnas de caracteres.Eso le habría mostrado JSL casi idéntico.Me gustaría ayudarlo a descubrir qué lo llevó a la conclusión que hizo, para poder ayudarlo a que la creación de scripts sea lo más fácil posible.
Ah... y necesita leer la Guía de secuencias de comandos... no hay sustituto para leerla.
Ayuda==>Biblioteca de documentación de JMP...……..Guía de secuencias de comandos
Re: Tabular todas las columnas numéricas de una tablaHola,
¡Muchas gracias!
Ahora veo que la sintaxis de una columna categórica es totalmente diferente.
¿Cómo haría esto si desea una tabla tabulada con lo siguiente:
Set Format( Name( "% of Total" )(9, 0) ),
Add Table(
Column Table( Statistics( N, Name( "% of Total" ) ) ),
Re: Tabular todas las columnas numéricas de una tablaAquí hay una reescritura de su código que usa una forma más simple de obtener los nombres de las columnas numéricas, y luego agrega la función Eval() alrededor de la lista de columnas numéricas, para que funcione
.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
NumericCols = dt << get column names( numeric );
dt << Tabulate(
Set Format( Uniform Format( 10, 2 ) ),
Show Control Panel( 0 ),
Add Table(
Column Table( Statistics( N ) ),
Column Table( Statistics( Mean, Std Dev ) ),
Column Table( Statistics( Min, Max ) ),
Column Table( Statistics( Median ) ),
Row Table( Analysis Columns( Eval( Numericcols ) ) )
)
);
Re: Tabular todas las columnas numéricas de una tablaPor error, edité la pregunta anterior y cambié la pregunta por mi respuesta. @ eliyahu100 Pido disculpas por mi error.