Para agregar límites de especificación en el gráfico de variabilidad de la tabla de datosHola,
Mi versión de JMP es 10.0.2. Debido al trabajo necesario, tengo cientos de parámetros para analizar y cada parámetro tiene más de 100 puntos de datos. Mi cliente me envió otro archivo que incluye el LSL, el objetivo y el USL de estos parámetros en Excel. Por lo tanto, me pregunto si existe una herramienta de secuencia de comandos/incrustación para vincular los límites de especificación con los parámetros correspondientes cuando estoy trazando el gráfico de variabilidad (el eje X será el número de lote diferente y el eje Y son los datos del parámetro). También quiero mostrar el diagrama de caja de los datos sin procesar. Actualmente hago todo esto manualmente, lo que desperdicia mucho tiempo. Entonces, hágame saber si hay una solución (supongo que debería ser)
Perdóneme si no puedo mostrar el archivo de datos sin procesar por razones confidenciales. Gracias de antemano.
Re: Para agregar límites de especificación en el gráfico de variabilidad de la tabla de datosGracias Nelson, este script puede funcionar en mi caso. Realmente aprecio su paciencia y apoyo!
Re: Para agregar límites de especificación en el gráfico de variabilidad de la tabla de datosLos nombres de sus columnas contienen caracteres que JMP intentará ejecutar, en lugar de usarlos como parte del nombre.Por lo tanto, tuve que agregar una función :Name() para obligar a JMP a interpretar el valor completo como un nombre.Vea el guión a continuación.
Nota: las declaraciones dt = y dtLimits = se han cambiado para buscar tablas de datos ya abiertas.Es posible que deba volver a cambiarlos para usar una función open().
// Open table to have limits set on
dt = data table("raw data");
dtLimits = data table("Spec limit");
// Get a list of all of the numeric columns in the measurment data table
colNames = dt << get column names( numeric, string );
// Loop across the Limits table and apply the findings to data table
For( i = 1, i <= N Rows( dtLimits ), i++,
// If a column in the measurement data table has the same name as the current
// Limits data table column "Parameter" has, then process the data
colNamesPosition = Loc( colNames, dtLimits:Parameter[i] );
If( N Rows(colNamesPosition) > 0,
Eval(
Substitute(
Expr(
__col__ << set property(
"Spec Limits",
{LSL( __LSL__ ), USL( __USL__ ), Target( __Target__ ), Show Limits( 1 )}
)
),
Expr( __col__ ), Parse( "dt:Name(\!"" || colNames[colNamesPosition[1]] || "\!")" ),
Expr( __LSL__ ), dtLimits:LSL[i],
Expr( __USL__ ), dtLimits:USL[i],
Expr( __Target__ ), dtLimits:Target[i]
)
)
);
);
// Run Variability Charts
Variability Chart( Y( :Name("TWNB_10/10$Vtlin%V"), :Name("TWNB_10/10$Idlin%uA/um") ), X( :wafer ) );Re: Para agregar límites de especificación en el gráfico de variabilidad de la tabla de datosAdjunté la tabla simplificada de datos sin procesar y la tabla de límites de especificaciones. Creo que el error proviene de la regla de nomenclatura de mis parámetros que contiene $. Pero no puedo cambiar el nombre del parámetro. Por favor, ayuda para comprobar. En verdad lo aprecio.
Re: Para agregar límites de especificación en el gráfico de variabilidad de la tabla de datosEl script que proporcioné asume que las columnas de la tabla de datos de Límites se nombran
- Parámetro
- LSL
- USL
- Objetivo
¿Son estos los nombres de las columnas en su tabla de datos de Límites?
¿Sería posible que adjunte una copia de su tabla de datos de Límites y su tabla de datos de Medición?Esto facilitaría la depuración de los problemas.
Re: Para agregar límites de especificación en el gráfico de variabilidad de la tabla de datosGracias Nelson. Modifiqué la secuencia de comandos y esta vez apareció otro error que decía "el acceso a la tabla de datos con ámbito requiere una columna o variable de la tabla de datos". Esto me vuelve a confundir. ¿Puedes por favor decirme el motivo?
Re: Para agregar límites de especificación en el gráfico de variabilidad de la tabla de datosAcabo de descubrir un error en mi código.Por favor cambie la línea en el código
If( N Rows( ) > 0,
a
If( N Rows( colNamesPosition ) > 0,
Re: Para agregar límites de especificación en el gráfico de variabilidad de la tabla de datosLos parámetros en raw data.jmp son solo partes de todos los parámetros en specLIMITES.jmp. ¿Entonces esta podría ser la razón?
Soy realmente nuevo en JSL, así que, si es posible, hágame saber si otras funciones pueden hacer cosas similares según mi caso. Muchas gracias por tu ayuda.
Re: Para agregar límites de especificación en el gráfico de variabilidad de la tabla de datosEl problema es que la función Loc() no encuentra una coincidencia en la lista colNames{}. La función requiere una coincidencia exacta. Mayúsculas/minúsculas, espaciado, etc., todos pueden causar un problema.Re: Para agregar límites de especificación en el gráfico de variabilidad de la tabla de datosHola Neslon,
Creo que conozco el problema, o al menos la diferencia entre mi forma de pensar y tu guión. Perdóname, no lo describí claramente antes.
Al principio, creé una nueva tabla de datos con datos sin procesar pegados. Supongo que esta es la tabla de datos actual. Así que lo defino como dt=tabla de datos actual(). Luego abro el archivo Spec Limits.jmp guardado
dtLimits<SPAN class="token operator">=</SPAN><SPAN class="token function">Open</SPAN><SPAN class="token punctuation">(</SPAN> <SPAN class="token string">"$Desktop\JMP\Spec limits.jmp"</SPAN> <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
Creo que esto no puede funcionar según el guión que publiqué.
Lo que estoy haciendo ahora es guardar la nueva tabla de datos como raw data.jmp. Luego use el siguiente script. Pero aún no se agregaron límites de especificaciones a los parámetros.
// Open table to have limits set on
dt = Open( "C:\Users\Desktop\JMP/raw data.jmp" );
// Open spec limit table
dtLimits = Open( "C:\Users\Desktop\JMP/Spec limits.jmp" );
// Get a list of all of the numeric columns in the measurement data table
colNames = dt << get column names( numeric, string );
// Loop across the Limits table and apply the findings to data table
For( i = 1, i <= N Rows( dtLimits ), i++,
// If a column in the measurement data table has the same name as the current
// Limits data table column "Parameter" has, then process the data
colNamesPosition = Loc( colNames, dtLimits:Parameter[i] );
If( N Rows() > 0,
Eval(
Substitute(
Expr(
__col__ << set property(
"Spec Limits",
{LSL( __LSL__ ), USL( __USL__ ), Target( __Target__ ), Show Limits( 1 )}
)
),
Expr( __col__ ), Parse( "dt:" || colNames[colNamesPosition[1]] ),
Expr( __LSL__ ), dtLimits:LSL[i],
Expr( __USL__ ), dtLimits:USL[i],
Expr( __Target__ ), dtLimits:Target[i]
)
)
);
);Así que traté de depurar este script; resulta que L22 muestra error: subíndice no válido (debe ser un número o una lista de números). No estoy seguro de por qué esto funciona en su script pero no en el mío. Si tiene alguna idea, por favor hágamelo saber. Gracias.
Expr( __col__ ), Parse( "dt:" || colNames[colNamesPosition[1]] ),
Re: Para agregar límites de especificación en el gráfico de variabilidad de la tabla de datosLa declaración:
dt=current data table();
establece la variable "dt" para que apunte a una tabla de datos ya abierta.Por lo tanto, si ni su tabla de datos de medidas ni su tabla de límites están abiertas, necesitará usar el
dt=open("<PATH>/data table name");</PATH>
para abrir su tabla de datos de medición, no la función "tabla de datos actual ()".
Debe asegurarse de comprender cómo es el JSL que proporcioné en mi primera respuesta, en lugar de simplemente cortarlo y pegarlo en su código.Todas las funciones utilizadas en mi ejemplo están documentadas en el índice de secuencias de comandos, junto con ejemplos.
Ayuda==>Índice de secuencias de comandos
Re: Para agregar límites de especificación en el gráfico de variabilidad de la tabla de datosHola Nelson,
Muchas gracias por su respuesta. En su ejemplo, creó dos tablas de datos, una es Big Class.jmp y otra es la tabla de límites de especificaciones. Sin embargo, en mi caso, ya existían estas dos tablas de datos. Entonces, creo que lo que me queda es vincular las dos tablas y hacer lo que proporcionó en el script a partir de colNames = dt << obtener nombres de columna (numérico, cadena). Probé a continuación:
dt=current data table();
show (dt);
dtLimits=Open( "$Desktop\JMP\Spec limits.jmp" );
y luego adjunto
colNames = dt << get column names (numeric, string ).
y después.Desafortunadamente, solo se abrió Spec Limits.jmp, pero los límites de especificaciones no se agregaron a la tabla de datos actual. ¿Puedes ayudarme a duplicar? En verdad lo aprecio.
Re: Para agregar límites de especificación en el gráfico de variabilidad de la tabla de datosAquí hay un script de muestra que leerá los valores de una tabla de datos de límites y los aplicará a la tabla de datos de medición.Y cuando el gráfico de variabilidad, o la mayoría de los gráficos de otras plataformas, muestren los límites de las especificaciones.
// Open table to have limits set on
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// Create a limits table for the example
dtLimits = New Table( "Limits",
Add Rows( 2 ),
New Column( "Parameter", Character, "Nominal", Set Values( {"height", "weight"} ) ),
New Column( "LSL", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [52, 60] ) ),
New Column( "Target", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [63, 105] ) ),
New Column( "USL", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [70, 180] ) )
);
// Get a list of all of the numeric columns in the measurment data table
colNames = dt << get column names( numeric, string );
// Loop across the Limits table and apply the findings to data table
For( i = 1, i <= N Rows( dtLimits ), i++,
// If a column in the measurement data table has the same name as the current
// Limits data table column "Parameter" has, then process the data
colNamesPosition = Loc( colNames, dtLimits:Parameter[i] );
If( N Rows() > 0,
Eval(
Substitute(
Expr(
__col__ << set property(
"Spec Limits",
{LSL( __LSL__ ), USL( __USL__ ), Target( __Target__ ), Show Limits( 1 )}
)
),
Expr( __col__ ), Parse( "dt:" || colNames[colNamesPosition[1]] ),
Expr( __LSL__ ), dtLimits:LSL[i],
Expr( __USL__ ), dtLimits:USL[i],
Expr( __Target__ ), dtLimits:Target[i]
)
)
);
);
// Run Variability Charts
Variability Chart( Y( :height, :weight ), X( :sex ) );