Anwendungsskripting... Gruppieren nach , VariableIch erstelle eine Anwendung, die es dem Benutzer ermöglicht, einige Optionen auszuwählen, bevor er ein Skript ausführt, das ein paar SQL-Abfragen umfasst und dann einige Diagramme erstellt ... nichts allzu Verrücktes.
Ein Optionsfeld-Steuerelement wird verwendet, um den Wert einer Variablen mit dem Namen „Typ“ festzulegen.Ich möchte, dass eine der „Anpassen wo“-Optionen für ein bivariates Diagramm der Inhalt dieser Variablen ist ...
Bivariate(
Y( :Current),
X( :Voltage),
Show Points( 0 ),
Fit Where(
:type == "cell",
Fit Each Value( {Report( 0 ), Line Color( {0, 0, 255} ), Report( 0 )} )
),
Fit Where(
:type == type, //this is troublesome line... the graph is generated but not quite right.
Fit Each Value( {Report( 0 ), Line Color( {213, 72, 87} ), Report( 0 )} )
),
By( :CellID)
);
Das Diagramm wird korrekt generiert, aber das Ärgerliche ist, dass das resultierende Diagramm sagt: „An jeden Werttyp anpassen == Typ“.Wie kann ich dafür sorgen, dass der Inhalt der verwendeten Variablen anstelle ihres Namens angezeigt wird?Ich habe bereits einige Optionen ausprobiert, darunter „eval(type)“.

Betreff: Anwendungsskripting... Gruppieren nach , VariableVielen Dank für die schnellen Antworten. Ich habe vergessen, es in mein Beispiel zu kopieren, aber der Anfang meines Skripts begann mit „names default to here(1);“ Ich glaube nicht, dass es wichtig ist, wo dieser Befehl im Skript erscheint, solange er vor der relevanten Funktion steht.
Ich habe zuerst Jims Code ausprobiert und er hat das gleiche Problem wie mein ursprüngliches Skript verursacht.Unterhalb der Grafik wurde nicht der Wert 13 angezeigt, sondern „age==age“.Hinweis: Ich verwende JMP 12

Da ich einen Variablennamen verwende, der nicht mit einer Spalte in meinen Tabellen übereinstimmt, glaube ich nicht, dass ich auf das Problem stoße, dass JMP versucht, die von gzmorgan0 erwähnten Spaltenwerte zuzuweisen.
Der Ansatz, „Gruppieren nach“ anstelle von „Anpassen, wo“ zu verwenden, hat den Zweck erfüllt.Da ich dieses Skript aus einer Bivariate kopiert habe, die über die Menüoptionen „Gruppieren nach“ erstellt wurde, bin ich nicht verwirrt darüber, warum stattdessen „Anpassen wo“ verwendet wurde.Aber das ist ein anderes Problem für einen anderen Tag.Danke für die Hilfe.
Betreff: Anwendungsskripting... Gruppieren nach , VariableJim hat recht.
Ohne Names Default To Here(1) sind alle Variablen global. Im JMP Scripting Guide heißt es:
„Wenn eine globale Variable und eine Spalte denselben Namen haben, ...In dieser Situation müssen Sie den Spaltennamen festlegen.“
Tatsächlich erhalte ich die Fehlermeldung, wenn ich das Skript ausführe
Der Wert für die Spalte „Alter“ kann nicht festgelegt werden, da die Zeilennummer (-1) ungültig ist.
Da es sich nicht um ::age handelt, geht JMP davon aus, dass die Anweisung age=13 versucht, der Spalte mit dem Namen age Werte zuzuweisen.Names Default To Here(1) macht die Variable „age“ lokal und löst diesen Konflikt. Ich empfehle jedoch dringend, dass Sie Names Default to Here(1) verwenden. Und Verwenden Sie für Benutzereingaben einen anderen Namen wie _age oder usr_val.Ich glaube, dass Namenskollisionen (Konflikte, auch Scoping genannt) nach Syntax und Tippfehlern der zweithäufigste Skriptfehler sind.
Das folgende Skript ist eine leichte Modifikation von Jims:
- _age wird ein Wert zugewiesen
- eine Alternative zu Fit Where().Durch Auswählen der zu verwendenden Werte und anschließende Verwendung von Group By() wird der Name für jeden Group By-Wert bereitgestellt.
names default to here(1);
dt=open("$SAMPLE_DATA/big class.jmp");
_age=13;
biv = dt << Bivariate(
Y( :weight),
X( :height),
Show Points( 0 ),
where(:age==12 | :age==_age),
Group By(:age),
Fit Each Value( {Report(0)}),
By(:sex)
);
biv << ( Curve[1] << Line Color ( {0, 0, 255 } ) );
biv << ( Curve[2] << Line Color ( {213, 72, 255 } ) );
Betreff: Anwendungsskripting... Gruppieren nach , VariableDas Problem scheint ein Scoping-Problem zu sein.Ich konnte Ihr Skript erst erfolgreich ausführen, als ich es hinzugefügt habe
Names Default to Here( 1 );
Hier ist Ihr Skript mit den Spaltennamen, die auf die Datentabelle „Big Class“ verweisen.
names default to here(1);
dt=open("$SAMPLE_DATA/big class.jmp");
age=13;
Bivariate(
Y( :weight),
X( :height),
Show Points( 0 ),
Fit Where(
:age == 12,
Fit Each Value( {Report( 0 ), Line Color( {0, 0, 255} ), Report( 0 )} )
),
Fit Where(
:age == age, //this is troublesome line... the graph is generated but not quite right.
Fit Each Value( {Report( 0 ), Line Color( {213, 72, 87} ), Report( 0 )} )
),
By( :sex)
);