Wenn eine Spezifikation aktiviert ist, wie schreibe ich ein Skript, wenn ich einen Fehlernamen schreiben möchte?
Hallo, ich habe eine Frage.
Wenn eine Spezifikation aktiviert ist, wie schreibe ich ein Skript, wenn ich einen Fehlernamen schreiben möchte? wie obiges Bild.
Bitte beachten Sie den Anhang (nur Beispiele).
In den tatsächlichen Daten, die ich schreibe, gibt es 1000 Spalten.
Danke
Betreff: Wenn eine Spezifikation aktiviert ist, wie schreibe ich ein Skript, wenn ich einen Fehlernamen schreiben möchte?*erinnern
@txnelson
Wow, danke, ich habe noch eine Frage.
Wenn nur die mittleren 100 der 1.000 Spalten keine Spezifikationen oder keinen Wert haben, funktioniert dieses Skript nicht. Kannst du es lösen?
Und ich möchte, dass die Pass-Fail-Spalte vorne steht.
Vielen Dank für deine Hilfe!Betreff: Wenn eine Spezifikation aktiviert ist, wie schreibe ich ein Skript, wenn ich einen Fehlernamen schreiben möchte?Vielen Dank MichelleG!!
Dieses Skript war eine große Hilfe für mich.
Betreff: Wenn eine Spezifikation aktiviert ist, wie schreibe ich ein Skript, wenn ich einen Fehlernamen schreiben möchte?Wow, danke, ich habe noch eine Frage.
Wenn nur die mittleren 100 der 1.000 Spalten keine Spezifikationen haben, funktioniert dieses Skript nicht. Kannst du es lösen?
Und ich möchte, dass die Pass-Fail-Spalte vorne steht.
Vielen Dank für deine Hilfe!Betreff: Wenn eine Spezifikation aktiviert ist, wie schreibe ich ein Skript, wenn ich einen Fehlernamen schreiben möchte?Hier ist meine Meinung zur Verwendung der Spezifikationsgrenzen in der Spalteneigenschaft jeder Spalte, um jede Zeile zu testen.Die für den Test verwendete Methode besteht darin, eine Bereichsprüfung auf jede Spalte anzuwenden.Dies wird verwendet, weil es eine sehr effiziente Möglichkeit ist, alle Daten in einer Spalte mit einer Operation zu verarbeiten.Angesichts der Anzahl der Spalten, mit denen Sie es zu tun haben, sollte diese Methode effizienter sein, als jede Zelle zu testen.Im Skript verwende ich die Semiconductor Data Table aus dem Sample Data-Ordner.Es sind alle Spezifikationsgrenzen für alle 128 Messspalten festgelegt.
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 );Betreff: Wenn eine Spezifikation aktiviert ist, wie schreibe ich ein Skript, wenn ich einen Fehlernamen schreiben möchte?Okay, ich kenne dieses Add-In nicht, aber vielleicht seinen Autor @txnelson können Sie hier darüber sprechen, wie Informationen aus diesem Add-In integriert werden. Ich habe ein kleines Beispiel geschrieben, das das tun würde, wonach Sie suchen, das anhand Ihrer 7-Spalten-Beispieltabelle getestet wurde, und ich hoffe, dass es auf Ihre 1000-Spalten-Version erweiterbar ist. Ich gehe davon aus, dass wir eine Liste mit Obergrenzen (UL) und eine Liste mit Untergrenzen (LL) haben, die in der gleichen Reihenfolge wie die Spalten sind. Sie können bei Bedarf eine Spalte aus einer Datentabelle einlesen, ich weiß nur nicht, wo ich vom Add-In auf die Datentabelle zugreifen soll.
Es gibt viele verschiedene Möglichkeiten, wie Sie dies implementieren können. Was ich geschrieben habe, ist nur eine Möglichkeit. Der allgemeine Plan, den ich verwendet habe, ist: Überprüfen Sie jede Spalte auf ihre jeweiligen Grenzen. Wenn es außerhalb der Spezifikation liegt, fügen Sie eine Liste hinzu, in der Sie dies vermerken. Schreiben Sie am Ende der Schleife, wenn die Liste leer ist, PASS. Verketten Sie andernfalls alle Elemente in der Liste.
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,", ")
);
);Macht das Sinn? Lassen Sie mich wissen, wenn Sie Fragen dazu haben, was vor sich geht.
Betreff: Wenn eine Spezifikation aktiviert ist, wie schreibe ich ein Skript, wenn ich einen Fehlernamen schreiben möchte?Ja! das stimmt.
Wenn jede Spalte innerhalb der Spezifikation liegt, möchte ich einfach "PASS" schreiben.
Es gibt keine Grenzen. Wenn jeder einzelne schlecht ist, möchte ich alle aufgelisteten schreiben.
Ich füge LSL, USL-Spezifikation mit dem unten gezeigten Add-In-Programm hinzu.
https://community.jmp.com/t5/JMP-Add-Ins/Write-Limits-to-a-Data-Table-from-a-Limits-Table/ta-p/35790
Vielen Dank für deine Hilfe
Betreff: Wenn eine Spezifikation aktiviert ist, wie schreibe ich ein Skript, wenn ich einen Fehlernamen schreiben möchte?Okay, Sie möchten eine Spalte hinzufügen, in der alle Process-Spalten aufgeführt sind, die die Spezifikation enthalten. Das heißt, Sie möchten jede Spalte überprüfen und an eine Zeichenfolge für diese Zeile anhängen, je nachdem, ob eine Bedingung für die Daten dieser Spalte schlecht ist oder nicht. Rechts? Wenn jede Spalte innerhalb der Spezifikation liegt, was sollte sie tun? Gibt es eine Begrenzung, wie viele Spaltennamen Sie auflisten möchten, oder möchten Sie möglicherweise alle 7 (oder 1000) auflisten, wenn jeder einzelne schlecht ist?
Woher wissen Sie, welche Spalten angeben? Ich frage nur nach den mathematischen Operationen, nicht nach den genauen Zahlen. Ich vermute, dass es für jede Spalte ein eindeutiges Spezifikationslimit (oder -limits) gibt. Für 7 Spalten könnten wir es einfach in einem Array definieren, das wir durchlaufen, aber für 1000 Spalten möchten Sie es wahrscheinlich in einer Referenztabelle haben, die Sie einlesen.Betreff: Wenn eine Spezifikation aktiviert ist, wie schreibe ich ein Skript, wenn ich einen Fehlernamen schreiben möchte?Der Anhang hat 7 Spalten und ich möchte eine Spalte hinzufügen, um zu überprüfen, welche Spalten angegeben sind.
Ich wollte Sie nur wissen lassen, dass es 1000 Spalten mit Daten gibt, die ich in der Firma schreibe und die ich aus vertraulichen Gründen nicht hochladen kann.
Wenn Sie mir im Anhang mitteilen, wie das geht, werde ich es in meinen Daten bearbeiten.
Danke!
Betreff: Wenn eine Spezifikation aktiviert ist, wie schreibe ich ein Skript, wenn ich einen Fehlernamen schreiben möchte?Was tun Sie, um den Fail-Namen zu bestimmen, den Sie schreiben möchten? Das ist notwendig, um Ihnen zu helfen, ein Skript dafür zu schreiben. Es sieht so aus, als ob Sie die Zeile basierend auf einigen Erkenntnissen in diesen 1000 Prozessspalten beschriften möchten.