Ich habe währenddessen sehr schnell einige Tipps und Tricks für JMP Scripting vorgestellt JMP Scripters Club Q2 .
Meine technischen Erklärungen sind möglicherweise nicht korrekt und ich verwende hier und da möglicherweise falsche Begriffe, da ich nicht ganz verstehen möchte alles (nur die meisten) was auf JMP und JSL vor sich geht, ich möchte nur, dass mein Code gut und schnell funktioniert.
Tipp 1: Aktivieren Sie das eingebettete Protokoll des JMP Script Editors
Durch die Aktivierung des eingebetteten Protokolls können Sie das JMP-Protokoll schnell und einfach direkt im Skripteditor von JMP anzeigen. Sie können das eingebettete Protokoll in den JMP-Einstellungen im 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
Textprotokoll in JMP (jmp.com-Hilfe)
Tipp2: Aktivieren Sie für JMP16+ das erweiterte Protokoll
Mit JMP16 wurde eine neue Funktion namens Enhanced Log veröffentlicht. Dadurch bleibt der Überblick darüber erhalten, was Sie interaktiv in JMP getan haben, es werden Skripts für diese Aktionen bereitgestellt und es wird einfacher, JMP Skripts für Sie schreiben zu lassen.
Das erweiterte Protokoll kann in den JMP-Einstellungen aktiviert werden. Sie können auch Änderungen daran vornehmen, was erfasst wird und wie das erweiterte Protokoll aussieht.

Vielleicht hilfreiche Links
Verbesserter Protokoll- und Aktionsrekorder – Neu in JMP 16 und JMP Pro 16
Das erweiterte Protokoll in JMP 16: Das ändert alles
Erweiterte Anmeldung bei JMP (jmp.com)
Tipp3 Werte von Variablen in Ausdrücke auswerten
Dies ist ein ziemlich häufiges Thema in der JMP-Community: Zum Beispiel, warum der Wert einer Variablen nicht in eine Formel ausgewertet wird. Dies bedeutet im Wesentlichen, dass die Werte nicht „aus“ den Ausdrücken (Variablen) ausgewertet wurden. Nachfolgend finden Sie Beispiele zur Veranschaulichung des Problems und möglicher Lösungen (meine bevorzugte Methode ist Eval(EvalExpr()) + Expr()).
Beispiel1 Formel
In diesem Beispiel werden zwei Spalten erstellt, eine ohne und eine mit Eval(EvalExpr()). Derjenige ohne bleibt mit dem Variablennamen in der Formel übrig
Mehr sehen...
Datentabelle und Formeln (beachten Sie, wie Formeln aussehen und was mit x-3-Werten passiert ist (sie sind jetzt hoch 4))

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

Das 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 hätte; um mein Skript zu starten (siehe Extra-Tipp ), würde ich die Leistungsvariable zum globalen Namespace hinzufügen und die Datentabelle würde immer noch den Leistungswert in derselben JMP-Sitzung kennen. Jetzt denke ich vielleicht, dass meine Datentabelle so funktioniert, wie sie soll, und ich teile die Tabelle, und wer auch immer ich sie geteilt habe, wird sich fragen, warum sie nicht funktioniert.
Beispiel 2: Spezifikationsgrenzen festlegen
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)}
);
)
);
Namen standardmäßig hier(1); // Demotabelle erstellen dt = New Table("Demo", Add Rows(6), New Column("Label", Character, "Nominal", Set Values({"A", "A", "A", " B", "B", "B"})), Neue Spalte("x", Numerisch, "Kontinuierlich", Format("Best", 12), Werte festlegen([1, 2, 3, 4, 5, 6])), Neue Spalte("y1", Numerisch, "Kontinuierlich", Werte festlegen( [0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0 .685370508348569] ) ), Neue Spalte("y2", Numerisch, "Kontinuierlich", Werte festlegen ([0,540628764079884, 0,0138843499589711, 0,363861175486818, 0,697015449637547, 0,114948588656262, 0,685370508348569]) ), Neue Spalte("y3", Numerisch, "Kontinuierlich", Werte festlegen( [0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0.6853 70508348569] ) ) ); Column(dt, "y1") << Set Property( "Spec Limits", {LSL(-1), USL(1), Show Limits(1)} ); unteres_limit = 0,5; obere_Grenze = 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 vor dem versehentlichen Überschreiben von Referenzen schützen können. Darüber habe ich kurz im 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 Tabelle „Halbleiterfähigkeit“ anstelle der Tabelle „Große Klasse“ geschlossen wird. Dies liegt daran, dass dt beim Schließen des bivariaten Fensters bereits auf die Halbleiterfähigkeit verweist (es hätte auch ein anderer Variablenname verwendet werden können, zum Beispiel 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");
Namen standardmäßig hier(1); dt = Open("$SAMPLE_DATA/Big Class.jmp"); biv = dt << Bivariate(Y(:Gewicht), X(:Höhe), 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 der Tabelle „Big Class“ auf die Anweisung „<< On close“ 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");
Namen standardmäßig hier(1); dt = Open("$SAMPLE_DATA/Big Class.jmp"); biv = dt << Bivariate(Y(:Gewicht), X(:Höhe), 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 einen Ausdruck in einen anderen ein, indem Sie Eval Insert, Eval Expr, Parse und Substitute verwenden
Funktionen zur Ausdrucksverarbeitung: Teil I – Expr(), NameExpr(), Eval(), ... entschlüsseln 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 Namespace mit globalen Variablen zu verschmutzen, und vermeidet spätere Probleme.Das mache ich immer, wenn ich eine neue Skriptdatei starte, auch wenn ich einen benutzerdefinierten Namespace verwenden möchte. Ich mache das, um zu vermeiden, dass Variablen im globalen Namespace versehentlich erstellt werden.
Vielleicht hilfreiche Links
Erweitertes Scoping und Namespaces (JMP-Hilfe, jmp.com) (Sehr gut zu lesen, es hat mehrere Seiten, schauen Sie sich die meisten davon unbedingt an!)
Regeln zum Auflösen von Namen (JMP-Hilfe, jmp.com)
Grundlegende Skripterstellung für Effizienz und Reproduzierbarkeit: Weniger tun, um mehr zu tun (2019-US-TUT-290)
Hallo @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, dass Ihr Skript über eine „Recall“-Funktion verfügt, bei der Sie auf die Schaltfläche „Recall“ klicken und dann alle Variablen oder Spalten auswählen können, die Sie in Rollen oder Werte umgewandelt haben. Die zur Verwendung in einer JMP-Plattform eingegebenen Dateien werden automatisch ersetzt und Sie müssen dies nicht manuell tun. Wenn Sie zu Beginn Ihres Skripts über die Funktion „clear globals(1)“ verfügen, werden Ihre Rückrufvariablen bei jeder Ausführung des Skripts aus dem Speicher gelöscht, wodurch die Rückruffunktion praktisch unbrauchbar wird.
DS
@Ressel Ich persönlich würde Clear Globals(1) meiden, da es möglicherweise andere Skripte beeinträchtigt, die möglicherweise ausgeführt werden. Es wäre viel sicherer, alle Skriptvariablen lokal oder auf ihren eigenen Namespace zu beschränken.
In Bezug auf die
Names default to here (1);
Ich habe auch einige Leute gesehen, die es benutzten
Clear globals (1);
zusätzlich am Anfang eines Skripts.
Ich denke, ich kann verstehen, warum das nützlich wäre, aber was ist Ihre Meinung dazu?