Hi, I have one question.
When a spec is on, how do I write a script when I want to write a fail name? like above image.
Please refer to the attachment(just samples).
In the actual data I write, there are 1000 columns.
Thanks
Here is my take on using the Spec Limits in each columns' Column Property to test each row. The method used for the testing is to apply a Range Check to each column. This is used because it is a very efficient way to deal with all of the data in a column with one operation. Given the number of columns you are dealing with, this method should be more efficient than testing each cell. In the script I use the Semiconductor Data Table from the Sample Data folder. It has all spec limits set for all 128 measurement columns.
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 );