Ich habe sehr schnell einige Tipps und Tricks für JMP Scripting vorgestellt JMP Scripters Club Q2 . Hier sind die gleichen Tipps in Textform (und noch ein bisschen mehr). Meine technischen Erklärungen sind möglicherweise nicht korrekt und ich verwende hier und da falsche Begriffe, da es mir nicht wichtig ist, sie vollständig zu verstehen alles (nur die meisten) was auf JMP und JSL los ist, ich möchte nur, dass mein Code gut und schnell funktioniert.
Tipp 1 Aktivieren Sie das eingebettete Protokoll des JMP-Skripteditors
Durch Aktivieren des eingebetteten Protokolls können Sie das JMP-Protokoll schnell und einfach direkt im Skript-Editor von JMP anzeigen. Sie können das eingebettete Protokoll in den JMP-Einstellungen unter Skripteditor aktivieren. Mit JMP16 können Sie auch die Höhe des eingebetteten Protokolls ändern (ich persönlich verwende Werte zwischen 25 % und 30 %).

Vielleicht hilfreiche Links
Textanmeldung bei JMP (jmp.com-Hilfe)
Tipp 2 Aktivieren Sie für JMP16+ Enhanced Log
Mit JMP16 wurde eine neue Funktion namens Enhanced Log veröffentlicht. Dadurch wird nachverfolgt, was Sie interaktiv in JMP getan haben, und es werden Skripts für diese Aktionen bereitgestellt, wodurch es einfacher wird, JMP Skripts für Sie schreiben zu lassen.
Erweitertes Protokoll kann über die Voreinstellungen von JMP aktiviert werden. Sie können auch Änderungen daran vornehmen, was erfasst wird und wie das erweiterte Protokoll aussieht.

Vielleicht hilfreiche Links
Erweiterte Protokoll- und Aktionsaufzeichnung – Neu in JMP 16 und JMP Pro 16
Das verbesserte Log in JMP 16: Das ändert alles
Verbesserte Anmeldung bei JMP (jmp.com)
Tipp 3 Werte von Variablen zu Ausdrücken auswerten
Dies ist ein ziemlich häufiges Thema in der JMP-Community: Warum wird beispielsweise der Wert von Variablen nicht in Formeln ausgewertet? Dies bedeutet im Grunde, dass die Werte nicht "aus" den Ausdrücken (Variablen) ausgewertet wurden. Unten finden Sie Beispiele, um das Problem und mögliche Lösungen zu demonstrieren (meine bevorzugte Methode ist Eval(EvalExpr()) + Expr()).
Beispiel1 Formel
In diesem Beispiel werden zwei Spalten erstellt, eine ohne und eine mit Eval(EvalExpr()). Der ohne bleibt mit dem Variablennamen in der Formel
Mehr sehen...
Names Default To Here(1);
// Create demo table
dt = New Table("Demo",
Add Rows(6),
New Column("Label", Character, "Nominal", Set Values({"A", "A", "A", "B", "B", "B"})),
New Column("x", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3, 4, 5, 6])),
New Column("y1", Numeric, "Continuous",
Set Values(
[0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0.685370508348569]
)
),
New Column("y2", Numeric, "Continuous",
Set Values(
[0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0.685370508348569]
)
)
);
power = 3;
new_col = dt << New Column("x to " || char(power), Numeric, Continuous, Formula(:x^power));
Show(new_col << Get Formula);
power = 4;
Eval(EvalExpr(new_col = dt << New Column("x to " || char(power), Numeric, Continuous, Formula(:x^Expr(power)))));
Show(new_col << Get Formula);
Datentabelle und Formeln (beachten Sie, wie Formeln aussehen und was mit x zu 3-Werten passiert ist (sie sind jetzt hoch 4))

Wenn Sie diese Datentabelle speichern, erneut öffnen und eine neue Zeile hinzufügen, erhalten Sie die folgende Fehlermeldung, da die Datentabelle den Wert der Leistung nicht kennt.

Dies liegt daran, dass ich Names Default To Here(1) verwende; im Beispielskript, aber der Fehler ist in diesem Fall eine gute Sache. Wenn ich Names Default To Here(1) nicht verwendet habe; um mein Skript zu starten (siehe Extra-Tipp ), würde ich die Power-Variable zum globalen Namespace hinzufügen und die Datentabelle würde immer noch den Power-Wert in derselben JMP-Sitzung kennen. Jetzt könnte ich denken, dass meine Datentabelle so funktioniert, wie sie soll, und ich gehe, um die Tabelle zu teilen, und wer auch immer ich sie geteilt habe, wird sich fragen, warum sie nicht funktioniert.
Beispiel 2 Legen Sie die Spezifikationsgrenzen fest
Dieses Beispielskript zeigt, wie Sie Eval(EvalExpr()) verwenden können, um Werte in Spalteneigenschaften (in diesem Fall Spec Limits) zu erhalten.
Mehr sehen...
Names Default To Here(1);
// Create demo table
dt = New Table("Demo",
Add Rows(6),
New Column("Label", Character, "Nominal", Set Values({"A", "A", "A", "B", "B", "B"})),
New Column("x", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3, 4, 5, 6])),
New Column("y1", Numeric, "Continuous",
Set Values(
[0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0.685370508348569]
)
),
New Column("y2", Numeric, "Continuous",
Set Values(
[0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0.685370508348569]
)
),
New Column("y3", Numeric, "Continuous",
Set Values(
[0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0.685370508348569]
)
)
);
Column(dt, "y1") << Set Property(
"Spec Limits",
{LSL(-1), USL(1), Show Limits(1)}
);
lower_limit = 0.5;
upper_limit = 1.5;
Column(dt, "y2") << Set Property(
"Spec Limits",
{LSL(lower_limit), USL(upper_limit), Show Limits(1)}
);
Eval(
EvalExpr(
Column(dt, "y2") << Set Property(
"Spec Limits",
{LSL(Expr(lower_limit)), USL(Expr(upper_limit)), Show Limits(1)}
);
)
);
Beispiel3 << Beim Schließen
Als letztes Beispiel werde ich zeigen, wie Sie Ihr Skript davor schützen können, Referenzen versehentlich zu überschreiben. Ich habe darüber kurz in der gesprochen 2022_Q1 MakeOverChallenge: Aktion per Mausklick auf verschiedene Arten Herausforderung B
Wenn Sie dieses Skript ausführen und das bivariate Fenster schließen, werden Sie feststellen, dass die Semiconductor Capability-Tabelle anstelle von Big Class geschlossen wird. Dies liegt daran, dass dt beim Schließen des bivariaten Fensters bereits auf die Halbleiterfähigkeit verweist (könnte auch einen anderen Variablennamen verwendet haben, z. B. dt_semi).
Mehr sehen...
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
biv = dt << Bivariate(Y(:Weight), X(:Height), Nonpar Density);
biv << On Close(
close(dt, no save)
);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
Und wenn Sie diesen Code ausführen, wird die richtige Tabelle geschlossen. Dies liegt daran, dass wir den Verweis in die Big Class-Tabelle auf die << On close-Anweisung auswerten
Mehr sehen...
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
biv = dt << Bivariate(Y(:Weight), X(:Height), Nonpar Density);
Eval(EvalExpr(
biv << On Close(
Close(Expr(biv << Get Data Table), no save)
);
));
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
Vielleicht hilfreiche Links
Fügen Sie mit Eval Insert, Eval Expr, Parse und Substitute einen Ausdruck in einen anderen ein
Funktionen zur Behandlung von Ausdrücken: Teil I - Enträtseln von Expr(), NameExpr(), Eval(), ... Rätsel
Ausdrücke (JMP-Hilfe, jmp.com)
Ausdrucksfunktionen (JMP-Hilfe, jmp.com)
Extra-Tipp Beginnen Sie Ihre Skripte mit Names Default To Here(1);
Dies schützt Sie davor, den Namensraum mit globalen Variablen zu verschmutzen, und vermeidet spätere Probleme.Dies mache ich immer, wenn ich eine neue Skriptdatei starte, selbst wenn ich einen benutzerdefinierten Namespace verwenden sollte. Ich tue dies, um zu vermeiden, dass sogar versehentlich Variablen im globalen Namensraum erstellt werden.
Vielleicht hilfreiche Links
Erweitertes Scoping und Namespaces (JMP-Hilfe, jmp.com) (sehr gut zu lesen, es hat mehrere Seiten, sehen Sie sich die meisten an!)
Regeln zum Auflösen von Namen (JMP-Hilfe, jmp.com)
Wesentliches Scripting für Effizienz und Reproduzierbarkeit: Weniger tun, um mehr zu tun (2019-US-TUT-290)
In Bezug auf die
Names default to here (1);
Ich habe auch einige Leute gesehen
Clear globals (1);
zusätzlich am Anfang eines Skripts.
Ich glaube, ich kann verstehen, warum das nützlich wäre, aber was ist Ihre Meinung dazu?
@Ressel , persönlich würde ich Clear Globals(1) vermeiden, da es andere Skripte stören könnte, die möglicherweise ausgeführt werden. Es wäre viel sicherer, alle Skriptvariablen lokal oder auf ihren eigenen Namespace zu beschränken.
Hi @Ressel ,
Ich bin einverstanden mit @DonMcCormack , ist es besser, die globalen Variablen nicht zu löschen. Ein Beispiel dafür, warum Sie dies nicht tun möchten, könnte sein, wenn Sie eine „Rückruf“-Funktion in Ihrem Skript haben, bei der Sie auf die Schaltfläche „Rückruf“ und dann auf alle Variablen oder Spalten klicken können, die Sie in Rollen oder Werte umgewandelt haben, die Sie verwenden. die zur Verwendung in einer JMP-Plattform eingegeben wurden, werden automatisch ersetzt, und Sie müssen nicht zurückgehen und dies manuell tun. Wenn Sie am Anfang Ihres Skripts clear globals(1) haben, werden Ihre Recall-Variablen jedes Mal, wenn Sie das Skript ausführen, aus dem Speicher gelöscht, wodurch die Recall-Funktion effektiv unbrauchbar wird.
DS