Ich möchte eine in einer Variablen gespeicherte Liste mit mehreren Spaltennamen definieren, die in die Y-Spalte von Control Chart Builder eingelesen werden sollen.Ich denke darüber nach, wie ich ein JSL-Skript schreiben soll, um den Titel zu realisieren.
Die verwendete JMP-Version ist 18.
dt02=current data table();
//列名を変数に
columnNames = dt02 << Get Column Names;
//3列目以降の列はすべてトレンドを確認するために必要
columnNames2={};
For( j = 3, j <= N Items( columnNames ), j++,
Insert Into( columnNames2, Column( columnNames[j] ) );
);
//X-bar_and_S_chart作成
grp01=dt02<<CONTROL chart="" builder=""></CONTROL><LINGO-LABS id="lingo-labs-825157" slang="ja-JP" mode="CREATE"><LINGO-LABEL>Automatisierung und Skripting</LINGO-LABEL><LINGO-LABEL>Windows</LINGO-LABEL></LINGO-LABS>Betreff: Ich möchte eine in einer Variablen gespeicherte Liste mit mehreren Spaltennamen definieren, die in die Y-Spalte von Control Chart Builder eingelesen werden sollen.Scheint, als ob Control Chart Builder eine der schwierigsten Plattformen in JMP sein möchte. Mit so etwas sollten Sie in der Lage sein, alle (auch die schwierigen/nervigen) zum Laufen zu bringen
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
cont_cols = dt << Get Column Names("Continuous", String);
ys = Expr(Y());
For Each({colname}, cont_cols,
Insert Into(ys, Name Expr(AsColumn(dt, colname)));
);
Eval(Substitute(
Expr(ccb = dt << Control Chart Builder(
Variables(Subgroup(:age), _ycols_),
Show Control Panel(0),
Chart(Position(1), Limits(Sigma("Standard Deviation"), Spec Limits(1))),
Chart(Position(2), Points(Statistic("Standard Deviation")), Limits(Sigma("Standard Deviation"))),
Show Control Panel(0)
)),
Expr(_ycols_), Name Expr(ys)
));Betreff: Ich möchte eine in einer Variablen gespeicherte Liste mit mehreren Spaltennamen definieren, die in die Y-Spalte von Control Chart Builder eingelesen werden sollen.Vielen Dank für den schönen Code!
Das Problem wurde vollständig gelöst, vielen Dank.
Ehrlich gesagt verstehe ich den Code immer noch nicht so gut. . .
Ich denke, dass es sich bei dem Bild um eines handelte, bei dem das in ys gespeicherte Array jedes Mal ersetzt wird und das Ergebnis im Kontrolldiagramm gespeichert wird. Ist es richtig?
Betreff: Ich möchte eine in einer Variablen gespeicherte Liste mit mehreren Spaltennamen definieren, die in die Y-Spalte von Control Chart Builder eingelesen werden sollen.In most of the platforms you could use Eval() with list of columns but in case of control chart builder it doesn't work and you have to have very specific format to make it work Y(:col, :col2). I build the correct format into ys, Y(:height, :weight) and then use Substitute to add to the Control Chart Builder message so it will be "forced" to evaluate correctly. You can see this if you remove Eval() outside of the Substitute() and run that

Sie können auch überprüfen, was ys ist, indem Sie Show(NameExpr(ys)) verwenden.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
cont_cols = dt << Get Column Names("Continuous", String);
ys = Expr(Y());
For Each({colname}, cont_cols,
Insert Into(ys, Name Expr(AsColumn(dt, colname)));
);
Show(Name Expr(ys)); // Name Expr(ys) = Y(:height, :weight);
Betreff: Ich möchte eine in einer Variablen gespeicherte Liste mit mehreren Spaltennamen definieren, die in die Y-Spalte von Control Chart Builder eingelesen werden sollen.entweder Eval(Substitute(Expr(...)))
... oder Eval(Eval Expr( Expr()...))
Tipps und Tricks - Best Practice mit JMP/JSL
Stellen Sie sich Eval (Eval Expr( Expr()...)) als Folgendes vor:
Suchen Sie bitte nach Expr() und Eval Expr() … bevor Sie das Ganze mit Eval() ausführen .
Leider beginnen alle drei mit E... , daher ist es etwas schwierig, sie sich mit der richtigen Bedeutung zu merken.
Das vierte E... ist Name Expr() - @jthi hat es in der For-Schleife verwendet, um die Strings in Spalten umzuwandeln (:column) *)
... und wir brauchen es, um Y(...) statt einer Fehlermeldung zu erhalten : )
*) Fortunately, Control Chart Builder accepts strings as alternative to columns.
Man kann also die Liste der Spaltennamen direkt in ein Y() von Spaltennamen umwandeln, indem man den Kopf durch ersetzt.
Ersetzen durch:
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
tmp = dt << Get Column Names("Continuous", String);
Substitute Into(tmp, Expr(List()), Expr(Y()));
Eval(Eval Expr(
ccb = dt << Control Chart Builder(
Variables(Subgroup(:age), Expr(Name Expr(tmp))),
Show Control Panel(0),
Chart(Position(1), Limits(Sigma("Standard Deviation"), Spec Limits(1))),
Chart(Position(2), Points(Statistic("Standard Deviation")), Limits(Sigma("Standard Deviation"))),
Show Control Panel(0)
)
));