Cuando una especificación está activada, ¿cómo escribo un script cuando quiero escribir un nombre fallido?
Hola, tengo una pregunta.
Cuando una especificación está activada, ¿cómo escribo un script cuando quiero escribir un nombre fallido? como la imagen de arriba.
Consulte el archivo adjunto (solo muestras).
En los datos reales que escribo, hay 1000 columnas.
Gracias
Re: Cuando una especificación está activada, ¿cómo escribo un script cuando quiero escribir un nombre fallido?*recordar
@txnelson
Wow, gracias, tengo una pregunta más.
Si solo las 100 del medio de las 1000 columnas no tienen especificaciones o ningún valor, este script no funcionará. ¿Puedes resolverlo?
Y quiero que la columna Aprobado fallido esté al frente.
¡Muchas gracias por tu ayuda!Re: Cuando una especificación está activada, ¿cómo escribo un script cuando quiero escribir un nombre fallido?Muchas gracias MichelleG!!
Este guión fue de gran ayuda para mí.
Re: Cuando una especificación está activada, ¿cómo escribo un script cuando quiero escribir un nombre fallido?Wow, gracias, tengo una pregunta más.
Si solo las 100 del medio de las 1000 columnas no tienen especificaciones, este script no funcionará. ¿Puedes resolverlo?
Y quiero que la columna Aprobado fallido esté al frente.
¡Muchas gracias por tu ayuda!Re: Cuando una especificación está activada, ¿cómo escribo un script cuando quiero escribir un nombre fallido?Aquí está mi opinión sobre el uso de los límites de especificación en la propiedad de columna de cada columna para probar cada fila.El método utilizado para la prueba es aplicar una verificación de rango a cada columna.Esto se usa porque es una forma muy eficiente de manejar todos los datos en una columna con una sola operación.Dada la cantidad de columnas con las que está tratando, este método debería ser más eficiente que probar cada celda.En el script, uso la tabla de datos de semiconductores de la carpeta de datos de muestra.Tiene todos los límites de especificación establecidos para las 128 columnas de medición.
Names Default To Here( 1 );
dtOrig = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
colNamesList = dtOrig << get column names( continuous, string );
// Create a work table of just the continuous columns
dt = dtOrig << subset( columns( colNamesList ), selected rows( 0 ) );
// Loop across all of the columns and apply a Range Check to eliminate
// all data outside of the upper and lower spec limits
For( theCol = 1, theCol <= N Items( colNamesList ), theCol++,
specs = Column( dt, colNamesList[theCol] ) << get property( "spec limits" );
Eval(
Substitute(
Expr(
Column( dt, colNamesList[theCol] ) << set property(
"Range Check",
(LELE( __LSL__, __USL__ ))
)
),
Expr( __LSL__ ), specs["LSL"],
Expr( __USL__ ), specs["USL"]
)
);
// Now convert the column to numeric
Column( dt, colNamesList[theCol] ) << data type( character );
// Now find all cells where values were eliminated
dt << select where( As Column( dt, colNamesList[theCol] ) == "" );
// If non passing rows were found, process the column to change the passing rows to
// a blank, and non passing to the name of the column
If( N Rows( dt << get selected rows ) > 0,
// Now set all eliminated cells to have the value of the name of the column
Column( dt, colNamesList[theCol] )[dt << get selected rows] = Column( dt, colNamesList[theCol] ) <<
get name;
// Invert the row selection, to select all rows where values passed and set them to a blank
dt << invert row selection;
Column( dt, colNamesList[theCol] )[dt << get selected rows] = "";
, // else set all
Column( dt, colNamesList[theCol] )[Index( 1, N Rows( dt ) )] = ""
);
);
// Now create a new column to hold the information on either that the row Passed or
// which columns failed
dt << New Column( "Pass_Fail", Character );
// Loop across all rows and set the values for the new column
For( theRow = 1, theRow <= N Rows( dt ), theRow++,
If( Trim( Concat Items( dt[theRow, 0, ""] ) ) == "",
:Pass_Fail[theRow] = "Pass"
,
thePass_Fail = Concat Items( dt[theRow, 0], "," );
For( i = Length( thePass_Fail ), i >= 2, i--,
If( Substr( thePass_Fail, i, 1 ) == ",",
If( Substr( thePass_Fail, i - 1, 1 ) == ",",
thePass_Fail = Substr( thePass_Fail, 1, i - 1 ) || Substr( thePass_Fail, i + 1 )
)
)
);
If( Right( thePass_Fail, 1) == ",", thePass_Fail = Left( thePass_Fail, length( thePass_Fail ) - 1 ) );
:Pass_Fail[theRow] = thePass_Fail;
)
);
// Only the new column is what is needed, so delete all other columns
dt << delete columns( eval(colNamesList) );
// Add the new column to the original data table
dtOrig << Update(
With( dt )
);
// Delete the no longer needed work table
close(dt, nosave );Re: Cuando una especificación está activada, ¿cómo escribo un script cuando quiero escribir un nombre fallido?De acuerdo, no estoy familiarizado con ese complemento, pero tal vez su autor @txnelson puede hablar sobre cómo integrar la información de ese complemento aquí. He escrito un pequeño ejemplo que haría lo que está buscando, probado con su tabla de ejemplo de 7 columnas, y espero que sea extensible a su versión de 1000 columnas. Supongo que tenemos una lista de límites superiores (UL) y una lista de límites inferiores (LL) que están en el mismo orden que las columnas. Puede leer en una columna de una tabla de datos, si es necesario, simplemente no sé dónde acceder a la tabla de datos desde el complemento.
Hay muchas formas diferentes de implementar esto. Lo que he escrito es sólo de una manera. El plan general que he usado es: verifique cada columna contra sus límites respectivos. Si está fuera de especificación, añádalo a una lista anotando esto. Al final del ciclo, si la lista está vacía, escriba APROBADO. De lo contrario, concatene todos los elementos de la lista.
dt = current data table(); // Process Measurements.jmp
// I just made these up.
// Assuming they are in the same order as the column names
ul = {10.5, 13.8, 2, 5, 1.1, 0.8, 11.8};
ll = {5.5, 13.4, 0.1, 1, 0.2, 0.2, 7};
col_list = dt << get column names(String);
dt << New Column("Check", Character, Nominal); // make blank column
// note that the new column is not in col_list
For Each Row( // in current data table
failcheck = {}; // initialize empty list
For(c=1, c<=N Items(col_list), c++, // loop over columns in col_list
// check if lower than LL or higher than UL
If(column(dt,col_list[c])[] < ll[c] | column(dt,col_list[c])[] > ul[c],
// if so, add this column to the failcheck list
Insert Into(failcheck, col_list[c])
)
);
If(N Items(failcheck)==0, // is the list empty?
column(dt,"Check")[] = "PASS",
column(dt,"Check")[] = Concat Items(failcheck,", ")
);
);¿Esto tiene sentido? Déjame saber si tienes alguna pregunta sobre lo que está pasando.
Re: Cuando una especificación está activada, ¿cómo escribo un script cuando quiero escribir un nombre fallido?¡Sí! ese derecho.
Si cada columna está dentro de las especificaciones, solo quiero escribir "PASS".
No hay límite. Si cada uno es malo, quiero escribir todos en la lista.
Agrego la especificación LSL, USL usando el programa adicional que se muestra a continuación.
https://community.jmp.com/t5/JMP-Add-Ins/Write-Limits-to-a-Data-Table-from-a-Limits-Table/ta-p/35790
Muchas gracias por tu ayuda
Re: Cuando una especificación está activada, ¿cómo escribo un script cuando quiero escribir un nombre fallido?De acuerdo, desea agregar una columna donde se enumeren todas las columnas de Proceso que especifican. Es decir, desea verificar cada columna y agregar una cadena para esa fila en función de si una condición es mala o no para los datos de esa columna. ¿Derecha? Si cada columna está dentro de las especificaciones, ¿qué debería hacer? ¿Hay un límite para la cantidad de nombres de columna que desea enumerar, o desea potencialmente enumerar los 7 (o 1000) si cada uno es incorrecto?
¿Cómo sabe qué columnas especifican? Solo estoy preguntando por la(s) operación(es) matemática(s), no los números exactos. Sospecho que hay un límite de especificación único (o límites) para cada columna. Para 7 columnas, podríamos simplemente definirlo en una matriz que recorremos, pero para 1000 columnas, probablemente lo querrá en una tabla de referencia en la que lea.Re: Cuando una especificación está activada, ¿cómo escribo un script cuando quiero escribir un nombre fallido?El archivo adjunto tiene 7 columnas y quiero agregar una columna para verificar qué columnas se especifican.
Solo quería hacerle saber que hay 1000 columnas de datos que escribo en la empresa y no puedo cargar eso por ser confidencial.
Si me dice cómo hacer esto en el archivo adjunto, lo editaré en mis datos.
¡Gracias!
Re: Cuando una especificación está activada, ¿cómo escribo un script cuando quiero escribir un nombre fallido?¿Qué estás haciendo para determinar el nombre de error que quieres escribir? Eso es necesario saberlo para ayudarte a escribir un guión para hacerlo. Parece que desea etiquetar la fila en función de algún hallazgo en estas 1000 columnas de proceso.