Quando una specifica è attiva, come posso scrivere uno script quando voglio scrivere un nome di errore?
Salve, ho una domanda.
Quando una specifica è attiva, come posso scrivere uno script quando voglio scrivere un nome di errore? come sopra l'immagine.
Si prega di fare riferimento all'allegato (solo campioni).
Nei dati effettivi che scrivo, ci sono 1000 colonne.
Grazie
Ri: Quando una specifica è attiva, come faccio a scrivere uno script quando voglio scrivere un nome di errore?*ricordare
@txnelson
Wow, grazie, ho un'altra domanda.
Se solo le 100 colonne centrali delle 1.000 colonne non hanno specifiche o nessun valore, questo script non funzionerà. Puoi risolverlo?
E voglio che la colonna Pass fail sia in primo piano.
Grazie mille per il vostro aiuto!Ri: Quando una specifica è attiva, come faccio a scrivere uno script quando voglio scrivere un nome di errore?Grazie mille MichelleG!!
Questa sceneggiatura mi è stata di grande aiuto.
Ri: Quando una specifica è attiva, come faccio a scrivere uno script quando voglio scrivere un nome di errore?Wow, grazie, ho un'altra domanda.
Se solo le 100 colonne centrali delle 1.000 colonne non hanno specifiche, questo script non funzionerà. Puoi risolverlo?
E voglio che la colonna Pass fail sia in primo piano.
Grazie mille per il vostro aiuto!Ri: Quando una specifica è attiva, come faccio a scrivere uno script quando voglio scrivere un nome di errore?Ecco la mia opinione sull'utilizzo dei limiti di specifica nella proprietà di colonna di ciascuna colonna per testare ciascuna riga.Il metodo utilizzato per il test consiste nell'applicare un Range Check a ciascuna colonna.Viene utilizzato perché è un modo molto efficiente per gestire tutti i dati in una colonna con un'unica operazione.Dato il numero di colonne con cui hai a che fare, questo metodo dovrebbe essere più efficiente del test di ogni cella.Nello script utilizzo la Semiconductor Data Table dalla cartella Sample Data.Ha tutti i limiti delle specifiche impostati per tutte le 128 colonne di misurazione.
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 );Ri: Quando una specifica è attiva, come faccio a scrivere uno script quando voglio scrivere un nome di errore?Ok, non ho familiarità con quel componente aggiuntivo, ma forse il suo autore @txnelson può parlare di come integrare le informazioni da quel componente aggiuntivo qui. Ho scritto un piccolo esempio che farebbe quello che stai cercando, testato rispetto alla tua tabella di esempio a 7 colonne e spero che sia estensibile alla tua versione a 1000 colonne. Presumo che abbiamo un elenco di limiti superiori (UL) e un elenco di limiti inferiori (LL) che sono nello stesso ordine delle colonne. Puoi leggere in una colonna da una tabella di dati, se necessario, semplicemente non so dove accedere alla tabella di dati dal componente aggiuntivo.
Esistono molti modi diversi per implementarlo. Quello che ho scritto è solo un modo. Il piano generale che ho usato è: controlla ogni colonna rispetto ai rispettivi limiti. Se non rientra nelle specifiche, aggiungilo a un elenco annotandolo. Alla fine del ciclo, se la lista è vuota, scrivi PASS. Altrimenti, concatena tutti gli elementi nell'elenco.
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,", ")
);
);Ha senso ciò? Fammi sapere se hai domande su cosa sta succedendo.
Ri: Quando una specifica è attiva, come faccio a scrivere uno script quando voglio scrivere un nome di errore?SÌ! giusto.
Se ogni colonna rientra nelle specifiche, voglio solo scrivere "PASS".
Non c'è limite. Se ognuno è cattivo, voglio scrivere tutti elencati.
Aggiungo LSL, specifiche USL utilizzando il programma aggiuntivo mostrato di seguito.
https://community.jmp.com/t5/JMP-Add-Ins/Write-Limits-to-a-Data-Table-from-a-Limits-Table/ta-p/35790
Grazie mille per il vostro aiuto
Ri: Quando una specifica è attiva, come faccio a scrivere uno script quando voglio scrivere un nome di errore?Ok, vuoi aggiungere una colonna in cui elenca tutte le colonne Process che specificano. Cioè, vuoi controllare ogni colonna e aggiungere a una stringa per quella riga in base al fatto che una condizione sia o meno negativa per i dati di quella colonna. Giusto? Se ogni colonna rientra nelle specifiche, cosa dovrebbe fare? Esiste un limite al numero di nomi di colonne che si desidera elencare o si desidera potenzialmente elencare tutti e 7 (o 1000) se ognuno di essi è errato?
Come fai a sapere quali colonne specificano? Sto solo chiedendo le operazioni matematiche, non i numeri esatti. Sospetto che ci sia un limite (o limiti) di specifica univoco per ogni colonna. Per 7 colonne, potremmo semplicemente definirlo in un array su cui eseguiamo il loop, ma per 1000 colonne probabilmente lo vorrai in una tabella di riferimento in cui leggi.Ri: Quando una specifica è attiva, come faccio a scrivere uno script quando voglio scrivere un nome di errore?L'allegato ha 7 coulmn e voglio aggiungere un coulmn per verificare quali colonne specificano.
Volevo solo farti sapere che ci sono 1000 colonne di dati che scrivo in azienda e non posso caricarli a causa della riservatezza.
Se mi fai sapere come farlo sull'allegato, lo modificherò sui miei dati.
Grazie!
Ri: Quando una specifica è attiva, come faccio a scrivere uno script quando voglio scrivere un nome di errore?Cosa stai facendo per determinare il nome dell'errore che vuoi scrivere? Questo è necessario sapere per aiutarti a scrivere una sceneggiatura per farlo. Sembra che tu voglia etichettare la riga in base a alcuni risultati in queste 1000 colonne di processo.