Kontrolldiagramm mit mehreren Datums- und Datenspalten automatisierenHallo,
Ich versuche, eine Möglichkeit zu automatisieren, Steuerungsdiagramme aus einer Tabelle zu erstellen, die wie folgt formatiert ist:
| Motor | 314-Datum | 314-Parameter 1 | 314-Parameter 2 | 314-Parameter ect. | 213-Parameter 1 | 213-Datum | 241-Parameter 1 | 241-Parameter 2 | 241-Datum |
| # | Datum | # | # | # | # | Datum | # | # | Datum |
| # | Datum | # | # | # | # | Datum | # | # | Datum |
Ich habe diesen Code, der mir nahe kommt, was ich will.
Rcols = dt << GetColumnNames( Continuous, String );
nw = New Window( "Control Charts", myVLB = V List Box() );
For( i = 1, i <= N Items( Rcols ), i++,
cc = Control Chart(
Sample Label( Column( dt, Rcols[1] ) ),
KSigma( 3 ),
Chart Col( Column( dt, Rcols[i] ), Levey Jennings )
);
myVLB << Append( Report( cc ) );
cc << close window;
);
Das Problem besteht nun jedoch darin, einen Weg zu finden, um das Musteretikett zum korrekten Datum für die ID der Parameter zu machen. Es gibt nicht für jede ID gleich viele Parameter, daher ist die Tabelle auf diese Weise nicht einheitlich, was dies ebenfalls etwas schwieriger macht.
Vielen Dank!
Betreff: Automatisieren eines Kontrolldiagramms mit mehreren Datums- und DatenspaltenDies bedeutet, dass das Element, in das Sie einzufügen versuchen, keine Liste ist. In diesem Code:
a=3;
insert into(c,a)
Sie erhalten den Fehler, da die Variable "c" nicht als Liste definiert wurde.
Betreff: Automatisieren eines Kontrolldiagramms mit mehreren Datums- und DatenspaltenHey Jim, ich denke, das ist wirklich nahe an dem, was ich brauche. Ich bekomme eine Fehlermeldung, die lautet:
Kann nur in einen L-Wert in Zugriff oder Auswertung von 'Einfügen in' eingefügt werden
Könnten Sie etwas Licht in das bringen, was dies bedeutet?
Vielen Dank
Betreff: Automatisieren eines Kontrolldiagramms mit mehreren Datums- und DatenspaltenJim, gepostet bevor ich meine Lösung beendet habe ... nochmal. Mein Ansatz ist ungefähr gleich, aber ich benutze gerne eine Funktion, die für das Arbeiten mit Listen erstellt wurde, wodurch sehr viel Code reduziert wird. Die Funktion, die ich Lfunc (list, expr) nenne, führt den Ausdruck für jedes Element in der Liste aus. [Dies war eine lange Zeit im JMP-Wunschliste-Element].
Die dritte Zeile in der JSL unten gibt also [2, 7, 10] für das von Ihnen angegebene Beispiel zurück. Für jede dieser Spalten bekomme ich den Code, und die Zeile, die mit "params =" beginnt, gibt alle Spalten (ohne Datum) zurück, die mit diesem Code beginnen.
Abgesehen von einem alternativen Ansatz und dem Wunsch nach einer in JMP eingebauten Funktion, etwa Lfunc (), habe ich festgestellt, dass Sie inaktive Kontrolldiagramme erstellen. Vielleicht ist dies Ihr Ziel. Wenn Sie interaktive Diagramme "live" anzeigen möchten, lesen Sie den kommentierten Code in der angehängten Datei FindColumns_CC.jsl
dt=current data table();
Rcols = dt << GetColumnNames(String ); //get all coumns so the code can use the column number
dateCols = Loc(Matrix(Lfunc(RCols, Expr(Contains(Lowercase(x),"date"))))); //2,7,10
nw = New Window( "Control Charts", myVLB = V List Box() );
for(i=1, i<=nrow(dateCols), i++,
code = Trim(word(1, Rcols[dateCols[i]], "-"));
params = Loc(Matrix(Lfunc(RCols, Expr(StartsWith(x,code) & !Contains(lowercase(x),"date")) )));
Betreff: Automatisieren eines Kontrolldiagramms mit mehreren Datums- und DatenspaltenIch glaube, ich verstehe deine Frage. Ich habe den Ansatz gewählt, alle Gruppen in den Daten zu finden und eine separate Liste von Spalten zu erstellen, die sich in jeder der Listen befinden. Dann werden die Gruppen über sie hinweg durchlaufen, und jede der Spalten in dieser Liste wird verarbeitet. Ich habe keine Datentabelle, mit der ich meine Lösung testen kann. Ich denke, der Code sollte als guter Leitfaden für die Lösung des Problems dienen Problem, sollte aber nicht als endgültige Lösung betrachtet werden
Rcols = dt << GetColumnNames( Continuous, String );
// Process the columns into group and separate lists for each group
groupList = {};
For( i = 2, i <= N Items( Rcols ), i++,
theGroup = Word( 1, Rcols[i], "-" );
// Check if the group has been seen before
If( Contains( groupList, theGroup ) > 0,
// If this is a new group, create a list to hold the column names
Eval( Parse( "Group_" || theGroup || " = {};" ) );
// Add the group name to the groupList
Insert Into( groupList, theGroup );
// Add the current parameter to the new group list
Insert Into( "Group_" || theGroup, Rcols[i] );
,
// If this isn't a new group list, then add it to the
// already existing group list
Insert Into( "Group_" || theGroup, Rcols[i] )
);
);
// Create the display window
nw = New Window( "Control Charts", myVLB = V List Box() );
// Loop across the groups
For( group = 1, group <= N Items( groupList ), group++,
// Set a standard list name to have the values of the current Group_list
Eval( Parse( "tempRcols = Group_" || groupList[group] || ";" ) );
// Generate the charts
For( i = 2, i <= N Items( tempRcols ), i++,
cc = Control Chart(
Sample Label( Column( dt, tempRcols[1] ) ),
KSigma( 3 ),
Chart Col( Column( dt, tempRcols[i] ), Levey Jennings )
);
myVLB << Append( Report( cc ) );
cc << close window;
);
);