Verwenden von JSL in JMP Ver. 15.2.0. Der JSL-Code ist in die angehängte Tabelle mit dem Skriptnamen = „Control Charts“ eingebettet.
Ich kämpfe mit dem Verhalten in verschachtelten Schleifen, wenn ich versuche, Spezifikationsgrenzen (LSL, Target, USL) über ein benutzerdefiniertes Grafikskript für eine variable Anzahl von Phasengruppierungen und "Wo" -Bedingungen hinzuzufügen.Meine verschachtelten Schleifen führen derzeit dazu, dass Spezifikationsgrenzen für das letzte Diagramm auf alle erstellten Regelkarten angewendet werden, anstatt dass jede Diagramm-/Phasen-/Wo-Bedingung ihre jeweiligen Grenzen erhält.
Vielen Dank im Voraus für einen Schubs in die richtige Richtung!
Todd
Todd, JMP / JSL ist im Vergleich zu typischeren Programmiersprachen etwas seltsam - insbesondere müssen Sie so ziemlich die gesamte Bereichssteuerung selbst vornehmen.
Ich habe hier ein Beispiel, das veranschaulicht, womit Sie es zu tun haben – man könnte meinen, dass das folgende Skript eine erstellt "Rot" dann "Blau" Dreieck im Grafikskript, sondern es werden nur zwei blaue Dreiecke erstellt.
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = Bivariate( Y( :weight ), X( :height ), FitLine );
rbiv = biv << report;
framebox = rbiv[frame box( 1 )];
/**** Make a red triangle??? ****/
color = "Red";
framebox << Add Graphics Script(
Transparency( 0.5 );
Fill Color( color );
Polygon( [60, 72, 57], [75, 120, 120] );
);
/**** Make a blue triangle??? ****/
color = "Blue";
framebox << Add Graphics Script(
Transparency( 0.5 );
Fill Color( color );
Polygon( [60, 72, 57], [85, 130, 130] );
);
Dies liegt daran, wie JSL den Geltungsbereich handhabt – wenn Sie die verwenden <<GRAFIKSKRIPT hinzufügen=""> Funktion dann wird sie als eine Reihe von nicht ausgewerteten Anweisungen hinzugefügt (eigentlich ist es eine nicht ausgewertete<CODE class=" language-jsl"> Kleber() Funktion). Jede Variable, die innerhalb der existiert <<GRAFIKSKRIPT hinzufügen=""> Skript wird ausgewertet<EM> nur während der Ausführung</EM> des Skripts.Wenn das Grafikskript ausgeführt wird (denken Sie daran, dass es an die<CODE class=" language-jsl"> Rahmenbox die in den Anzeigebaum des Fensters eingebettet ist) muss jede Variable aufgelöst werden.Die Regeln für die Bereichsauflösung schreiben vor, dass es sich mit dem befasst Lokal Anwendungsbereich (falls vorhanden), der Hier Geltungsbereich (falls vorhanden), dann die Global Bereich -- wenn es sie in keinem dieser Bereiche finden kann, wird es durch ein ersetzt Leer() Wert.
Die Skripte werden also zu den hinzugefügt Rahmenbox innerhalb des Hauptskripts, aber erst später ausgeführt.An diesem späteren Punkt ist die Farbvariable "Blau" , also sind beide Dreiecke blau.
Der Weg, dies zu lösen, besteht darin, alle interessierenden Variablen aufzulösen beim Hinzufügen das Grafikskript, nicht bei der Ausführung.Verwenden Sie dazu die Bewertung( Bewertungsausdr() ) Methodik, wie hier gezeigt.
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = Bivariate( Y( :weight ), X( :height ), FitLine );
rbiv = biv << report;
framebox = rbiv[frame box( 1 )];
/**** Make a red triangle!!! ****/
color = "Red";
Eval( Eval Expr(
framebox << Add Graphics Script(
Transparency( 0.5 );
Fill Color( Expr( color ) );
Polygon( [60, 72, 57], [75, 120, 120] );
);
) );
/**** Make a blue triangle!!! ****/
color = "Blue";
Eval( Eval Expr(
framebox << Add Graphics Script(
Transparency( 0.5 );
Fill Color( Expr( color ) );
Polygon( [60, 72, 57], [85, 130, 130] );
);
) );
Sie müssen diese Methode für alle Ihre Variablen innerhalb der verwenden <<GRAFIKSKRIPT hinzufügen=""> Funktion, damit sie den Wert zum Zeitpunkt der halten<CODE class=" language-jsl"> <<GRAFIKSKRIPT hinzufügen=""> hieß.</GRAFIKSKRIPT>