So führen Sie ein Skript für jede Probe in einer Liste aus, wenn in der Datentabelle mehrere Einträge pro Probe vorhanden sind.Ich habe eine Datentabelle, in der dieselben Proben mehrmals gemessen wurden (siehe Beispiel unten). Die Proben werden durch ihre Kennung getrennt.

Ich möchte, dass mein Skript in der Lage ist, für jede Probe die gleichen Berechnungen durchzuführen, damit ich Kontrollgrenzen bestimmen und eine Kontrollkarte für A, B, C usw. erstellen kann. Ich kenne die Kennung der einzelnen Proben nicht. Ich habe bereits ein Skript, das meine Berechnungen durchführen und die Diagramme für mich erstellen kann. Es kann jedoch nicht für jede Kennung separate Berechnungen durchführen.
Mein erster Versuch bestand darin, dafür eine Art Schleife zu verwenden. Ich habe ein Skript, das jeden eindeutigen Bezeichner in einer Liste zurückgibt und mir als Einrichtung für die Schleife die Anzahl der eindeutigen Bezeichner angibt.
Identifiers = Column( "Identifier") << GetAsMatrix();
Identifiers set = Associative Array( Identifiers);
Unique Identifiers = Identifiers set << Get Keys;
nUnique Identifiers = N Items (Unique Identifiers);
Ich schaffe es jedoch einfach nicht, eine Schleife zum Laufen zu bringen. Gibt es einen besseren Weg, dies zu tun? Oder könnte mir jemand zeigen, wie man die Schleife macht?
Ich verwende JMP 10.
Danke schön!
Qualitäts- und VerfahrenstechnikBetreff: So führen Sie ein Skript für jede Probe in einer Liste aus, wenn in der Datentabelle mehrere Einträge pro Probe vorhanden sind.Funktioniert wie ein Zauber, danke!
Betreff: So führen Sie ein Skript für jede Probe in einer Liste aus, wenn in der Datentabelle mehrere Einträge pro Probe vorhanden sind.Wenn Sie Ihr Skript nicht ändern möchten, können Sie es wie folgt für eine Teilmenge jeder Ebene des Bezeichners ausführen:
Names default to here(1);
//Open some sample data
dt = Open( "$Sample_data/big class.jmp" );
//Your code
Identifiers = Column( "age") << GetAsMatrix();
Identifiers set = Associative Array( Identifiers);
Unique Identifiers = Identifiers set << Get Keys;
nUnique Identifiers = N Items (Unique Identifiers);
//A window to hold a bunch of graphs
win = New Window("Graphs", graphbox = v list box());
//Run an analysis on a subset of the data table for each level of a variable
for( i=1, i<=nUnique Identifiers, i++,
//Make a subset of the table with only values for this level
dt << Select Where( :age == UniqueIdentifiers[i]);
dtSub = dt << Subset("Selected Rows");
//run your existing script on the subset
//For demonstration, taking a picture of the graph builder platform
// and getting the R2 value from a linear model and adding those to a window
pic = (gb = dtSub << Graph Builder(
Size( 534, 456 ),
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ) ),
Elements( Points( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Close Outline( 1 ),
Add Filter(
columns( :age ),
Where( :age == Unique Identifiers[i] ),
Display( :age, N Items( 6 ) )
)
)
)) << Get Picture;
graphbox << Append( pic );
gb << Close Window;
fm = dtSub << Fit Model(
Y( :height ),
Effects( :weight ),
Personality( "Standard Least Squares" ),
Emphasis( "Effect Leverage" ),
Run(
:height << {Summary of Fit( 1 ), Analysis of Variance( 1 ),
Parameter Estimates( 1 ), Scaled Estimates( 0 ),
Plot Actual by Predicted( 1 ), Plot Residual by Predicted( 1 ),
Plot Studentized Residuals( 0 ), Plot Effect Leverage( 1 ),
Plot Residual by Normal Quantiles( 0 ), Box Cox Y Transformation( 0 )}
)
);
Wait( 0 );
dtSum = Report( fm )[Outline Box( "Response height" )][Outline Box( "Whole Model" )][
Outline Box( "Summary of Fit" )][Table Box( 1 )] << Make Into Data Table;
Report( fm ) << Close Window;
Rsq = dtSum:Column 2[1];
graphbox << Append( Text Box( "RSquared was " || char(Rsq) ) );
dtSum << Close Window;
//close the subset
dtSub << Close Window;
);Betreff: So führen Sie ein Skript für jede Probe in einer Liste aus, wenn in der Datentabelle mehrere Einträge pro Probe vorhanden sind.Wie könnte ich zusätzliche, nach der Kennung gefilterte Berechnungen durchführen? Ich möchte einige Daten manipulieren und dann meine eigenen Grenzwerte basierend auf den Daten pro Kennung berechnen, die dann zu jedem der Diagramme hinzugefügt würden. Daher denke ich, dass vor dem endgültigen Diagrammskript jede Art von Filter vorhanden sein müsste. Ich habe ein Skript, das das kann, und ich kann es bei Bedarf veröffentlichen, aber es ist ziemlich lang. Ich suche eigentlich nur nach einer Möglichkeit, das Skript, das ich bereits ausgeführt habe, für jeden Bezeichner und nicht für alle Zeilen in der Datentabelle zu erstellen
Betreff: So führen Sie ein Skript für jede Probe in einer Liste aus, wenn in der Datentabelle mehrere Einträge pro Probe vorhanden sind.Ich frage mich, ob die Verwendung der integrierten Kontrolldiagrammplattformen zur Berechnung von Grenzwerten und zur Darstellung von Kennzahlen funktionieren würde, insbesondere wenn Sie der Analyserolle „Bezeichner“ den Bezeichner zuweisen.
Ich möchte nur nicht, dass Sie viel Zeit mit der Skripterstellung verbringen, wenn dadurch bereits verfügbare Funktionen dupliziert werden.
Betreff: So führen Sie ein Skript für jede Probe in einer Liste aus, wenn in der Datentabelle mehrere Einträge pro Probe vorhanden sind.Es gibt viele Möglichkeiten, dies zu tun, aber eine besteht darin, einfach einen lokalen Datenfilter zu Ihren vorhandenen Plattformen hinzuzufügen.Hier ist ein Beispiel für die Verwendung des Graph Builder:
Names default to here(1);
//Open some sample data
dt = Open( "$Sample_data/big class.jmp" );
//Your code
Identifiers = Column( "age") << GetAsMatrix();
Identifiers set = Associative Array( Identifiers);
Unique Identifiers = Identifiers set << Get Keys;
nUnique Identifiers = N Items (Unique Identifiers);
//A window to hold a bunch of graphs
win = New Window("Graphs", graphbox = v list box());
//Open a graph that is filtered to only show each unique identifier
//to keep things organized add it to a single window.
for( i=1, i<=nUnique Identifiers, i++,
win << Append(<BR /> //To get this script I opened graph builder and added a local data filter for one age<BR /> //and then copied/pasted it here and replaced the age with 4Unique Identifiers[i]
Graph Builder(
Size( 534, 456 ),
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ) ),
Elements( Points( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Close Outline( 1 ),
Add Filter(
columns( :age ),
Where( :age == Unique Identifiers[i] ),
Display( :age, N Items( 6 ) )
)
)
)
)
);