Ich arbeite an einem Skript, das eine Liste von Y-Antworten durchläuft und für jede eine Verschlechterung (Stabilitätstest) durchführt, bevor Teile des Berichts in eine kombinierte Datentabelle ausgegeben werden. Es besteht aus den folgenden Schritten:
- Öffnet ein Dialogfeld, in dem der Benutzer mehrere „J, Antwort“, die „Zeit“ und die „Bezeichnung, System-ID“ auswählt.
- Für jede „Y, Antwort“ durchläuft das Skript eine Schleife, führt einen Degradationsstabilitätstest durch und gibt die „Modellvergleiche“-Informationen in einem Bericht aus.
- Verkettet die Berichte zu einer Mastertabelle.
Ich habe Code eingefügt, um den Namen der Y-Spalte für jede Schleife zu übernehmen und ihn als neue Spalte zu jedem Bericht hinzuzufügen und dann jeden Bericht zu einer neuen Mastertabelle zu verketten. Die einzelnen Berichte und die „combinedDataTable“ haben beide die neue Spalte („Quell-Y-Spalte“); sie füllt die Zellen jedoch nicht mit dem jeweiligen Spaltennamen. Das Skript läuft einwandfrei und ohne Fehler. Ich habe unten einige Screenshots eingefügt. Der problematische Code befindet sich gegen Ende des Skripts.
// Initialize an empty data table to store combined results
combinedDataTable = New Table( "Combined Degradation Data" );
// Loop through each selected Y column and perform degradation analysis
For( i = 1, i <= N Items( YCols ), i++,
currentYCol = Column( dt, YCols[i] );
// Calculate the min and max values of the current Y column
minValue = Col Minimum( currentYCol );
maxValue = Col Maximum( currentYCol );
// Adjust the min and max values by 2%
adjustedMin = minValue * 0.98;
adjustedMax = maxValue * 1.02;
// Determine the increment value based on the highest value
If( maxValue < 5,
incValue = 0.25,
If( maxValue > 5 & maxValue < 15,
incValue = 0.25,
If( maxValue > 90,
incValue = 0.5,
incValue = (adjustedMax - adjustedMin) / 10
)
)
);
//Determine the X Scale Box Based on Number of Timepoints
maxTimepoint = Col Maximum( Column( dt, XCols[1] ) );
adjustedMaxTimepoint = maxTimepoint + 1;
// Perform Degradation Analysis
degReport = dt << Degradation(
Y( currentYCol ),
Time( Column( dt, XCols[1] ) ), // Assuming only one X column is selected
Label( Column( dt, BCols[1] ) ), // Assuming only one By column is selected
Application( "Stability Test" ),
Connect Data Markers( 0 ),
Show Fitted Lines( 1 ),
Show Spec Limits( 1 ),
Show Median Curves( 0 ),
Show Legend( 1 ),
No Tab List( 0 ),
Use Pooled MSE for Nonpoolable Model( 0 ),
Set Censoring Time( . ),
Show Residual Plot( 1 ),
Show Inverse Prediction Plot( 1 ),
Show Curve Interval( 1 ),
Inverse Prediction Interval( "Confidence Interval" ),
Inverse Prediction Alpha( 0.05 ),
Inverse Prediction Side( "Lower One Sided" ),
SendToReport(
Dispatch( {"Overlay"}, "1", ScaleBox, {Min( -1 ), Max( adjustedMaxTimepoint ), Inc( 6 ), Minor Ticks( 1 )} ),
Dispatch(
{"Overlay"},
"2",
ScaleBox,
{Format( "Fixed Dec", 12, 1 ), Min( adjustedMin ), Max( adjustedMax ), Inc( incValue ), Minor Ticks( 0 )}
)
)
);
// Extract the data from the specified location
extractedData = Report( degReport )["Degradation Data Analysis"]["Overlay"]["Stability Tests"][Table Box( 2 )] << Make Combined Data Table;
// Add a column to indicate the source Y column
currentYColName = Column( dt, YCols[i] ) << Get Name;
extractedData << New Column( "Source Y Column", Character, "Nominal", Set Values( Repeat( currentYColName, N Rows( extractedData ) ) ) );
// Combine the extracted data into the combined data table
combinedDataTable << Concatenate( extractedData, Append to first table( 1 ) );
// Close the individual report window
Close( Window( degReport ) );
);
// Show the combined data table
combinedDataTable << Show Window;
Hinweise:
Hier ist das Ausgabefenster einer der Degradationsanalysen. Ich extrahiere die Informationen im roten Umriss.

Hier ist die Master-Ausgabetabelle, die beide Y-Antworten enthält, die Spalte „Quell-Y“ ist jedoch nicht ausgefüllt.

Wenn Sie für jede Zeile den gleichen Wert festlegen, können Sie „Jeden Wert festlegen“ verwenden.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
mystr = "ABC";
dt << New Column("X", Character, Set Each Value(mystr));