Hallo,
Dies ist eine Darstellung des Skripts, mit dem ich ein Problem habe:
For(l = 0, l <= n, l++, Dispatch({"Normal Quantile Plot"}, "2", ScaleBox, {Format("Best", 6), AddRefLine(l/100, "Dotted", "Black", Char(l) || "/100", 1), ) ) ) ); rep = Eval(EvalExpr(ow)) << Report;n = 100;
ow = Expr(
OneWay(Y(colPara), X(splitPara),
MeansAndStdDev(0), AllGraphs(0), LineOfFit(0), StdDevLines(1), Legend(1), PlotQuantileByActual(1),
SendToReport(
Dispatch({}, "Normal Quantile Plot", OutlineBox, {SetTitle("")}),<BR /><CODE class="language-jsl">
Ich versuche also, ein OneWay-Plot in einem Ausdruck zu speichern, der später ausgewertet und in einen Bericht umgewandelt wird.
Die erste Meldung erfüllt ihren Zweck:
Dispatch({}, "Normal Quantile Plot", OutlineBox, {SetTitle("")})
Die For-Schleife funktioniert jedoch nicht, und ich glaube, das hat etwas damit zu tun, wie JMP laufende Variablen in Kombination mit den Expr/Eval-Funktionen handhabt.
</CODE></PRE>
<P><CODE class="language-jsl">
Gibt es hierfür eine Lösung oder einen Workaround?
Herzliche Grüße 
For(l = 0, l <= n, l++, <BR /> Dispatch({"Normal Quantile Plot"}, "2", ScaleBox, {Format("Best", 6), AddRefLine(l/100, "Dotted", "Black", Char(l) || "/100", 1),<BR />)
Ich würde eine Funktion dafür erstellen und innerhalb dieser Funktion die For-Schleife aus dem Plattformlauf herausverlagern.
Ich denke, so etwas könnte funktionieren (es gibt aber noch viele andere Möglichkeiten).
Names Default To Here(1);
create_oneway = Function({dt, colpara, splitpara, n = 100}, {Default Local},
ow = dt << OneWay(
Y(Eval(colPara)),
X(Eval(splitPara)),
MeansAndStdDev(0),
AllGraphs(0),
LineOfFit(0),
StdDevLines(1),
Legend(1),
PlotQuantileByActual(1)
);
rep = ow << report;
For(l = 0, l <= n, l++,
rep << Dispatch(
{"Normal Quantile Plot"}, "2", ScaleBox,
{
Format("Best", 6),
Add Ref Line(l/100, "Dotted", "Black", Char(l) || "/100", 1)
}
);
);
rep << Dispatch({}, "Normal Quantile Plot", OutlineBox, {SetTitle("")});
return(ow);
);
dt = open("$SAMPLE_DATA/Big Class.jmp");
ow = create_oneway(dt, "weight", "age");
Write();
Sie könnten Expr verwenden, aber in diesem Fall würde ich den Ausdruck aus mehreren verschiedenen Teilen zusammensetzen.