Intentando extraer límites de especificaciones de las columnas<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola,
Estoy intentando extraer los límites de especificaciones de las columnas para poder usarlos en un informe personalizado, pero obtengo un comportamiento extraño. A continuación se muestra un fragmento de lo que estoy haciendo:
Borrar globales();
dt = Tabla de datos( "bla" );
cols1 = dt << Obtener nombres de columnas (numérico, continuo);
Para (jj = 1, jj <= N elementos (cols1), jj++,
spec_x = cols1[jj] << Obtener propiedad( "Límites de especificaciones" );
Imprimir(
Char( jj ) || ": Col es " || Char( cols1[jj] << obtener nombre ) ||
", LSL es " || Char( spec_x["lsl"] ) ||
", USL es " || Char( especificación_x["usl"] )
);
);
La declaración impresa no es el uso final real, ¡pero sirve para mostrar si he extraído los límites de una manera útil!
Ahora, este código funciona bien para una pequeña tabla de prueba de 2 columnas:
"1: Col es X, LSL es 1, USL es 2"
"2: Col es Y, LSL es 3, USL es 7"
Que coincide con lo que hay en mi mesa. Pero para una tabla más grande de 73 columnas (numéricas, continuas), por alguna razón no puede poner nada en spec_x, solo obtengo:
"1: Col es Rc_N+PO (N/.09/280), LSL es ., USL es ."
"2: Col es Rc_V1 (N/.1/1260), LSL es ., USL es ."
"3: Col es Rc_V2 (N/.1/1188), LSL es ., USL es ."
"4: Col es Rc_V3 (N/.1/1188), LSL es ., USL es ."
"5: Col es Rc_V4 (N/.1/1188), LSL es ., USL es ."
... etc
Definitivamente hay datos límite en la tabla, ¡lo he verificado dos veces! Entonces, ¿hay alguna razón por la que podría no estar funcionando? La tabla está abierta, el script claramente obtiene los nombres de las columnas correctamente, simplemente no puedo hacer que recoja los límites.
Cuando paso por el script y llego a spec_x = cols1[jj] << Get Property( "Spec limits" ); el registro muestra:
Límites de especificaciones (LSL (10), USL (50), objetivo (30))
pero luego, cuando ejecuto la declaración de impresión, simplemente dice:
"1: Col es Rc_N+PO (N/.09/280), LSL es ., USL es ."
¡Cualquier ayuda apreciada!
Gracias,
Mateo.
Re: Intentando extraer límites de especificaciones de columnasEso funciona ahora, gracias por tu ayuda 
Re: Intentando extraer límites de especificaciones de columnasOk, parece que, dependiendo de cómo se crearon los límites de especificación, <
dt = Nueva mesa ( "Ejemplo" ) ;
dt << Nueva columna ( "Sin límites de especificación" , Numérico , Continuo ) ;
dt << Nueva columna ( "Rc_N+PO (N/.09/280)" ,
Numérico ,
Continuo ,
Establecer propiedad ( "Límites de especificaciones" , Límites de especificaciones ( LSL ( 10 ) , USL ( 50 ) , Objetivo ( 30 ) ) ) ,
Establecer valores ( [ 18.306 , 18.937 , 17.979 ] )
) ;
dt << Nueva columna ( "Prueba" ,
Numérico ,
Continuo ,
Establecer propiedad ( "Límites de especificaciones" , { LSL ( 1 ) , USL ( 5 ) , Objetivo ( 3 ) , Mostrar límites ( 0 )} ) ,
Establecer valores ( [ 2 , 3 , 4 ] )
) ;
cols1 = dt << Obtener nombres de columnas ( numérico , continuo ) ;
Para ( jj = 1 , jj <= N artículos ( cols1 ) , jj ++,
q = cols1 [ jj ] << Obtener propiedad ( "Límites de especificaciones" ) ;
especificación_x = Lista de evaluación ( { Arg ( q , 1 ) , Arg ( q , 2 ) , Arg ( q , 3 )} ) ;
Si ( N fila ( ubicación ( especificación_x , Vacío () ) ) ,
Imprimir (
Carbonizarse ( jj ) || ": Col" || Carbonizarse ( cols1 [ jj ] << obtener nombre ) ||
", no tiene límites de especificaciones"
) ,
Imprimir (
Carbonizarse ( jj ) || ": Col es " || Carbonizarse ( cols1 [ jj ] << obtener nombre ) || ", LSL es "
|| Carbonizarse ( especificación_x [ "LSL" ] ) || ", USL es " || Carbonizarse ( especificación_x [ "USL" ] )
)
) ;
) ;
Re: Intentando extraer límites de especificaciones de columnasGracias a ambos por sus respuestas, pero aún no hemos tenido suerte. Por cierto, estoy usando JMP 11.2 de 64 bits en Win7.
MS: su código funcionó bien para mí al crear una nueva tabla de prueba, pero no al usar mi tabla.
dkeshock: tu edición no ayudó, pero me dio un consejo útil sobre cómo extraer fácilmente los nombres de las columnas, gracias 
Creo que puedo tener una causa raíz ahora, pero todavía no estoy seguro de cómo resolverla. Copié una de mis columnas en una tabla nueva y luego creé una nueva columna de prueba con límites ingresados manualmente. El script funciona para la nueva columna de prueba:
"1: Col es Rc_N+PO (N/.09/280), LSL es ., USL es ."
"2: Col es Prueba, LSL es 1, USL es 5"
Así que miré los scripts de las dos columnas (deliberadamente limitados a unas pocas filas):
Nueva columna( "Rc_N+PO (N/.09/280)",
Numérico, Continuo, Formato( "Mejor", 10 ),
Establecer propiedad( "Límites de especificaciones", Límites de especificaciones( LSL( 10 ), USL( 50 ), Objetivo( 30 ) ) ),
Establecer valores ([18.306, 18.937, 17.979])
)
Nueva columna( "Prueba",
Numérico, Continuo, Formato( "Mejor", 12 ),
Establecer propiedad( "Límites de especificación", {LSL( 1 ), USL( 5 ), Objetivo( 3 ), Mostrar límites( 0 )} ),
Establecer valores ([2, 3, 4])
)
Parece que el código para la propiedad de límites de especificaciones es diferente. La única razón por la que puedo pensar es que para mis datos reales, importé los límites de especificaciones de una tabla de datos usando la plataforma de capacidad, mientras que para la columna de prueba los ingresé manualmente.
¿Podría ser esta la fuente de mi problema? ¿Hay alguna forma de solucionar esto o debo ingresar los límites de especificaciones manualmente (o con un script como el de MS)?
Gracias,
Mateo.
Re: Intentando extraer límites de especificaciones de columnasCuando lo probé por primera vez, funcionó en el número 58 de 81 columnas que tenía en una tabla existente.Descubrí que los nombres de las columnas cambiaban las convenciones en la variable Cols1 en el mismo punto (los primeros 58 eran ":ColumnName" y el resto sin el ':'), así que cambié a usar los nombres de las cadenas y funcionó bien para mí.
En el ejemplo anterior, no se ejecuta por mi parte hasta que cambie los dos "Cols1[jj]" a "Column(cols1[jj])".¿Hay alguna razón para eso?
Re: Intentando extraer límites de especificaciones de columnasDebería funcionar, y lo hace (JMP 11) en el siguiente ejemplo, que se basa en su código. Intente insertar comandos Wait(0) para probar si se trata de un problema de rendimiento.
//Hacer tabla de ejemplo
dt = nueva mesa ( "ejemplo" ) ;
Para ( i = 1 , i <= 100 , i ++,
columna = dt << nueva columna ( "prueba" , numérico , continuo ) ;
evaluar ( evaluarexpr ( columna << establecer propiedad ( "Límites de especificaciones" , { LSL ( exprés ( i ) ) , USL ( exprés ( i + 2 ) ) , Objetivo ( exprés ( i + 1 ) ) , Mostrar límites ( 0 )})))
) ;
//Imprimir límites de especificaciones
cols1 = dt << Obtener nombres de columnas ( numérico , continuo ) ;
Para ( jj = 1 , jj <= N artículos ( cols1 ) , jj ++,
especificación_x = cols1 [ jj ] << Obtener propiedad ( "Límites de especificaciones" ) ;
Imprimir (
Carbonizarse ( jj ) || ": Col es " || Carbonizarse ( cols1 [ jj ] << obtener nombre ) || ", LSL es " || Carbonizarse ( especificación_x [ "lsl" ] ) || ", USL es "
|| Carbonizarse ( especificación_x [ "usl" ] )
) ;
) ;
Re: Intentando extraer límites de especificaciones de columnas¿Este funciona?
Borrar globales () ;
dt = tabla de datos ("bla") ;
cols1 = dt << Obtener nombres de columnas ( numérico , continuo , "Cadena" ) ;
Elementos = N artículos ( cols1 ) ;
Para ( jj = 1 , jj <= Elementos , jj ++,
especificación_x = Columna ( cols1 [ jj ]) << Obtener propiedad ( "Límites de especificaciones" ) ;
Imprimir (
Carbonizarse ( jj ) || ": Col es " || Carbonizarse ( cols1 [ jj ] ) ||
", LSL es " || Carbonizarse ( especificación_x [ "lsl" ] ) ||
", USL es " || Carbonizarse ( especificación_x [ "usl" ] )
) ;
) ;
Re: Intentando extraer límites de especificaciones de columnasEn relación con esta discusión, aquí hay una pequeña función interesante que escribí para manejar las especificaciones de extracción. Utiliza manejo de expresiones y una matriz asociativa para crear un pequeño diccionario agradable que se puede usar más adelante:
getSpecs = Function( {colref},
{default local},
// get the spec limits column property
plist = colref << Get Property("Spec Limits");
// some blank lists to hold the values
keys = {};
values = {};
// loop through the property and get the sub-property name and value
// put those into the correct lists
For Each( {value, index}, plist,
Insert Into( keys, Head Name( value ) );
Insert Into( values, Arg( value, 1) );
);
// build an AA and return as the result of the function
parameters = Associative Array( keys, values );
);
El uso sería algo como esto:
Names Default To Here( 1 );
Clear Log();
getSpecs = Function( {colref},
{default local},
// get the spec limits column property
plist = colref << Get Property("Spec Limits");
// some blank lists to hold the values
keys = {};
values = {};
// loop through the property and get the sub-property name and value
// put those into the correct lists
For Each( {value, index}, plist,
Insert Into( keys, Head Name( value ) );
Insert Into( values, Arg( value, 1) );
);
// build an AA and return as the result of the function
parameters = Associative Array( keys, values );
);
// open a data table with specs
dt = Open("$Sample_Data/Quality Control/Vial Fill Weights.jmp");
// get the specs from the column
specs = getSpecs(Column("Fill Weight"));
// do something with the values
lsl = specs["LSL"];
tgt = specs["Target"];
usl = specs["USL"];
show(lsl, tgt, usl);