Übergeben Sie Elemente aus berechneten Statistiken an bestimmte Koordinaten in einer gespeicherten DatentabelleIch erzeuge mehrere Diagramme mit berechneten Statistiken. Ich möchte bestimmte berechnete statistische Parameter zB das Minimum, Median und Maximum aus weitergeben Quantile und Std Dev aus Zusammengefasste Statistiken zu bestimmten Koordinaten in einer gespeicherten Datentabelle mit JSL.
Zum Beispiel möchte ich weitergeben
- minimales Quantil bis Zeile 5, Spalte 7
- Median zu Zeile 5, Spalte 8
- maximales Quantil bis Zeile 5, Spalte 9
- Std Dev bis Zeile 5, Spalte 10.
zu meiner gespeicherten Datentabelle. Wie erreicht man das mit JSL?
(Die Koordinaten sind in der gespeicherten Datentabelle zunächst leer)
DatentabelleGrafikSkripterstellungBetreff: Übergeben Sie Elemente aus berechneten Statistiken an bestimmte Koordinaten in einer gespeicherten DatentabelleVielen Dank. Das funktioniert. Da ich von Matlab und C# komme, gewöhne ich mich immer noch an die Denkweise von JSL.
Betreff: Übergeben Sie Elemente aus berechneten Statistiken an bestimmte Koordinaten in einer gespeicherten DatentabelleSehen Sie sich Ihren Code genau an. Sie weisen resultsdt den zurückgegebenen Wert der Include-Funktion zu. Dieser zurückgegebene Wert ist das letzte, was von der eingeschlossenen Datei getan wird, was zu "H" ausgewertet wird. es ist keine Datentabelle.
bearbeiten:
Entweder (1) fügen Sie eine letzte Zeile zu basicTable.jsl hinzu, die besagt
resultsdt;
oder (2) das Include so ändern (Kommentar hinzufügen)
/*resultsdt =*/ include ("basicTable.jsl");
Ich denke, (1) scheint näher an dem zu liegen, was Sie erwarten. Es stellt sicher, dass das Letzte, was ausgewertet wird, die Variable ist, die die Datentabelle enthält, die dann als Ergebnis von include() zurückgegeben wird.
(2) funktioniert möglicherweise auch, abhängig vom lokalen Verhalten und unter Verwendung des gleichen Variablennamens. Ich denke, es wird ein wenig unvorhersehbar sein, je nachdem, ob Sie überall namesDefaultToHere verwenden und ob resultsdt bereits existiert. Ich bin mir nicht sicher, wie das funktioniert, ohne zu testen.
Betreff: Übergeben Sie Elemente aus berechneten Statistiken an bestimmte Koordinaten in einer gespeicherten DatentabelleDie Aussage
Column(resultsdt, "Column 1")[8] ="H";
übergibt nur einen Parameternamen H bis zur 8. Zeile von Spalte 1. Eine alternative Art der Definition Ergebnissedt
Names Default To Here (1);
// set up a table to accept the results
resultsdt = New Table( "Results Table",
Add Rows( 8),
New Column( "Column 1" ),
New Column( "Column 2" ),
New Column( "Column 3" ),
New Column( "Column 4" ),
New Column( "Column 5" ),
New Column( "Column 6" ),
New Column( "Min", Numeric ),
New Column( "Median", Numeric ),
New Column( "Max", Numeric ),
New Column( "SD", Numeric )
);
resultsdt:Column 1[1] ="A";
resultsdt:Column 1[2] ="B";
resultsdt:Column 1[3] ="C";
resultsdt:Column 1[4] ="D";
resultsdt:Column 1[5] ="E";
resultsdt:Column 1[6] ="F";
resultsdt:Column 1[7] ="G";
resultsdt:Column 1[8] ="H";
funktioniert auch nicht bei der nutzung
resultsdt = include ("basicTable.jsl");
Wenn ich jedoch die Spalte 1 leer lasse, läuft der Code einwandfrei. Jede Hilfe zur Lösung dieses Problems wäre sehr nützlich.
Betreff: Übergeben Sie Elemente aus berechneten Statistiken an bestimmte Koordinaten in einer gespeicherten Datentabelle
resultsdt = include ("basicTable.jsl");
Wenn diese Datei das ist, was Sie zeigen, ist das Problem, dass resultsdt keine Datentabelle ist, sondern (vielleicht?) Was auch immer dies auswertet
Column(resultsdt, "Column 1")[8] ="H";
das könnte "H" sein. Das Ergebnis der Include-Funktion ist das letzte, was ausgewertet wird. (In Übereinstimmung mit Ihrer Anmerkung.)
Ja, die Fehlermeldung war nicht so hilfreich, wie Sie vielleicht wünschen. @Audrey_Shull - es sollte auf die linke Seite des = zeigen, nicht auf die rechte.
Betreff: Übergeben Sie Elemente aus berechneten Statistiken an bestimmte Koordinaten in einer gespeicherten DatentabelleVielen Dank @Craige_Hales . Ich verstehe das Problem jetzt etwas besser. Allerdings gibt es noch einen Fehler. Folgendes funktioniert wie vorgesehen
Names Default To Here (1);
delete symbols ();
clear log ();
// set up a table to accept the results
resultsdt = New Table( "Results Table",
Add Rows( 8),
New Column( "Column 1" ),
New Column( "Column 2" ),
New Column( "Column 3" ),
New Column( "Column 4" ),
New Column( "Column 5" ),
New Column( "Column 6" ),
New Column( "Min", Numeric ),
New Column( "Median", Numeric ),
New Column( "Max", Numeric ),
New Column( "SD", Numeric )
);
Column(resultsdt, "Column 1")[1] = "A";
Column(resultsdt, "Column 1")[2] = "B";
Column(resultsdt, "Column 1")[3] = "C";
Column(resultsdt, "Column 1")[4] = "D";
Column(resultsdt, "Column 1")[5] = "E";
Column(resultsdt, "Column 1")[6] = "F";
Column(resultsdt, "Column 1")[7] = "G";
Column(resultsdt, "Column 1")[8] ="H";
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
getDistChart = Function({ColName, _LSL, _USL}, {distChart},
New Window(""||ColName||" distribution",
distChart = dt << Distribution(
Stack( 1 ),
Continuous Distribution(
Column(As Column (ColName) ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Capability Analysis( LSL(_LSL ), USL(_USL) )
),
SendToReport(
Dispatch(
{},
"Distrib Histogram",
FrameBox,
{DispatchSeg( LabelSeg( 1 ), {Font( "Segoe UI", 7, "Plain" )} ),
DispatchSeg( LabelSeg( 2 ), {Font( "Segoe UI", 7, "Plain" )} )}
)
)
);
);
return(distChart);
);
dist = getDistChart ("weight", 55, 185);
toPass= Report( dist )[Outline Box("weight" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box(1)]<< get (1);
//resultsdt = include ("basicTable.jsl");
resultsdt[1, 2] = toPass;
//show (toPass);
Allerdings, wenn ich definiere Ergebnissedt getrennt wie unten
Names Default To Here (1);
// set up a table to accept the results
resultsdt = New Table( "Results Table",
Add Rows( 8),
New Column( "Column 1" ),
New Column( "Column 2" ),
New Column( "Column 3" ),
New Column( "Column 4" ),
New Column( "Column 5" ),
New Column( "Column 6" ),
New Column( "Min", Numeric ),
New Column( "Median", Numeric ),
New Column( "Max", Numeric ),
New Column( "SD", Numeric )
);
Column(resultsdt, "Column 1")[1] = "A";
Column(resultsdt, "Column 1")[2] = "B";
Column(resultsdt, "Column 1")[3] = "C";
Column(resultsdt, "Column 1")[4] = "D";
Column(resultsdt, "Column 1")[5] = "E";
Column(resultsdt, "Column 1")[6] = "F";
Column(resultsdt, "Column 1")[7] = "G";
Column(resultsdt, "Column 1")[8] ="H";
und rufen Sie es dann wie folgt auf (so habe ich meinen tatsächlichen Code eingerichtet)
Names Default To Here (1);
delete symbols ();
clear log ();
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
getDistChart = Function({ColName, _LSL, _USL}, {distChart},
New Window(""||ColName||" distribution",
distChart = dt << Distribution(
Stack( 1 ),
Continuous Distribution(
Column(As Column (ColName) ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Capability Analysis( LSL(_LSL ), USL(_USL) )
),
SendToReport(
Dispatch(
{},
"Distrib Histogram",
FrameBox,
{DispatchSeg( LabelSeg( 1 ), {Font( "Segoe UI", 7, "Plain" )} ),
DispatchSeg( LabelSeg( 2 ), {Font( "Segoe UI", 7, "Plain" )} )}
)
)
);
);
return(distChart);
);
dist = getDistChart ("weight", 55, 185);
toPass= Report( dist )[Outline Box("weight" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box(1)]<< get (1);
resultsdt = include ("basicTable.jsl");
resultsdt[1, 2] = toPass;
//show (toPass);
Ich bekomme den Fehler
Not subscriptable value{8} in access or evaluation of 'Assign' , resultsdt[1, 2] = /*###*/toPass/*###*/
wo gehe ich falsch?
(Ich stelle fest, dass beide oben genannten Ansätze gut funktionieren, wenn ich die Einträge in Spalte 1 überhaupt nicht definiere.)
Betreff: Übergeben Sie Elemente aus berechneten Statistiken an bestimmte Koordinaten in einer gespeicherten Datentabelle2-Problemen wird der zurückgegebenen lokalen Variablen nie etwas zugewiesen, und die Datentabelle muss an die Benutzerfunktion übergeben werden. Etwas wie das
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
getDistChart = Function( {dt, ColName, _LSL, _USL},
{distChart},
New Window( "" || ColName || " distribution",
distChart = dt << Distribution(
Stack( 1 ),
Continuous Distribution(
Column( As Column( ColName ) ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Capability Analysis( LSL( _LSL ), USL( _USL ) )
),
SendToReport(
Dispatch(
{},
"Distrib Histogram",
FrameBox,
{DispatchSeg( LabelSeg( 1 ), {Font( "Segoe UI", 7, "Plain" )} ),
DispatchSeg( LabelSeg( 2 ), {Font( "Segoe UI", 7, "Plain" )} )}
)
)
)
);
Return( distChart );
);
dist = getDistChart( dt, "weight", 55, 185 );
In JMP ist der <<-Operator der senden Operator und sendet eine Nachricht (rechts) an a skriptfähiges Objekt , auf der Linken. Die Datentabelle (dt) ist ein skriptfähiges Objekt, aber es kennt keine Nachricht getDistChart . Es kennt die eingebauten Plattformen, wie z Verteilung . Der Skriptindex zeigt alle Nachrichtennamen für die Datentabelle.
Betreff: Übergeben Sie Elemente aus berechneten Statistiken an bestimmte Koordinaten in einer gespeicherten Datentabelle@ron_horne . Das Folgende sollte helfen, die Dinge etwas mehr zu klären, da es meinem eigentlichen Problem sehr ähnlich ist. Ich bekomme das Verteilungsdiagramm über eine Funktion.
Names Default To Here (1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
getDistChart = Function({ColName, _LSL, _USL}, {distChart},
New Window(""||ColName||" distribution",
Distribution(
Stack( 1 ),
Continuous Distribution(
Column(As Column (ColName) ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Capability Analysis( LSL(_LSL ), USL(_USL) )
),
SendToReport(
Dispatch(
{},
"Distrib Histogram",
FrameBox,
{DispatchSeg( LabelSeg( 1 ), {Font( "Segoe UI", 7, "Plain" )} ),
DispatchSeg( LabelSeg( 2 ), {Font( "Segoe UI", 7, "Plain" )} )}
)
)
);
);
return(distChart);
);
dist = dt << getDistChart ("weight", 55, 185);
Mir scheint, dass die letzte Zeile nicht das tut, was sie zum Extrahieren von Werten aus der Verteilung tun soll, da keine Verteilung überhaupt gezeichnet wird. Die Frage ist nun, wie man Werte berechneter Statistiken erhält, wenn die Verteilung über eine Funktion wie meine oben dargestellt wird. Vielleicht ist eine Funktion keine Nachricht und kann daher nicht mit << an ein Objekt gesendet werden?
Jede Hilfe wäre sehr nützlich, da ich noch JMP lerne.
Betreff: Übergeben Sie Elemente aus berechneten Statistiken an bestimmte Koordinaten in einer gespeicherten DatentabelleDanke noch einmal @ron_horne , aber beide funktionieren nicht und geben mir den gleichen Fehler.
Wollen Sie sagen, dass das Folgende eine korrekte und gültige Verwendung ist? Beachten Sie, dass es ist nicht plotten die Verteilung, wenn sie wie unten verwendet wird (übrigens verstehe ich die Funktion von nicht Abstand in Abstand=dt ?)
Output = Report( dist = dt << getDistribution("ColName", "LSL", "USL", "other input parameters") );
und der Fehler (aus dem Log kopiert)
Send Expects Scriptable Object{8} in access or evaluation of 'Send' , Output[Outline Box( "height" ), Outline Box( "Quantiles" ),
Table Box( 1 ), Number Col Box( 1 )] << /*###*/get( 1 ) /*###*/Not subscriptable value{8} in access or evaluation of 'Assign' , resultsdt[5, 9] = /*###*/Output[Outline Box( "Pass Distribution" ),
Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << /*###*/get( 1 ) /*###*/
/*###*/
Ich bekomme aufgrund meiner folgenden Aussage (auch wenn Ihr Vorschlag unten ist)
resultsdt[5, 9] = Output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1)] << get( 1 ); // max
Wenn ja, möchte ich einen einfachen Test durchführen und etwas Einfacheres an resultsdt übergeben. Gibt es einen einfachen Test, mit dem ich testen kann, ob ich überhaupt etwas bekommen kann? Ausgabe zur Datentabelle Ergebnissedt ?
Betreff: Übergeben Sie Elemente aus berechneten Statistiken an bestimmte Koordinaten in einer gespeicherten DatentabelleHi @Neo ,
Wenn ich Ihr Problem richtig verstehe, müssen Sie auf die Nummerierung und die Adressen achten. Sobald Sie Namen von Gliederungsfeldern verwenden, beginnt die Nummerierung von Tabellenfeldern und Nummernspaltenfeldern bei 1.
Versuchen Sie daher Folgendes:
resultsdt[5, 9] = Output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1)] << get( 1 ); // max
Wenn Sie Number Col Box (11) verwenden möchten, versuchen Sie Folgendes:
resultsdt[5, 9] = Output[Number Col Box( 11)] << get( 1 ); // max
hoffe das klappt jetzt.
Im Allgemeinen gibt es viel ausgefallenere Möglichkeiten, das Skript dazu zu bringen, die Position der interessierenden Werte mithilfe von xpath () oder Musterabgleich wie in diesem Link zu finden: http://www.pega-analytics.co.uk/blog/oneway-advisor-step-3/
Betreff: Übergeben Sie Elemente aus berechneten Statistiken an bestimmte Koordinaten in einer gespeicherten DatentabelleVielen Dank @ron_horne . Lassen Sie mich versuchen, einen Überblick darüber zu geben, was ich zu tun versuche. Mein Hauptskript hat den folgenden (hier vereinfachten) Ablauf.
Öffnen Sie eine Datentabelle (und nennen Sie sie dt ) und zeichnen Sie dann mithilfe einer Funktion Verteilungsdiagramme für mehrere Spalten darin
getDistribution ("ColName", "LSL", "USL", "other input parameters")
Alle resultierenden Verteilungsdiagramme haben "Quantile", "Summary Statistics" und "Capability Analysis (with outline closed)".
Der nächste Teil des Hauptskripts besteht darin, eine Tabelle zu erstellen (nennen wir sie Ergebnissedt ) mit mehreren Zeilen und Spalten, in denen ich Werte berechneter Statistiken übergeben muss, wie im ursprünglichen Beitrag angegeben.
Folgendes funktioniert jedoch nicht.
output = Report( dist = dt << getDistribution("ColName", "LSL", "USL", "other input parameters") );
resultsdt[5, 9] = Output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 6 ), Number Col Box( 11)] << get( 1 ); // max
Ich habe sichergestellt, dass die Zahlen in Table Box () und Number Col Box () korrekt sind. Ich bekomme den folgenden Fehler
Send Expects Scriptable Object{8} in access or evaluation of 'Send' , output[Outline Box( "height" ), Outline Box( "Quantiles" ),
Table Box( 6 ), Number Col Box( 11 )] << /*###*/get( 1 ) /*###*/
Wo gehe ich falsch?
Betreff: Übergeben Sie Elemente aus berechneten Statistiken an bestimmte Koordinaten in einer gespeicherten DatentabelleHallo Neo,
Ihr Verweis auf distb funktioniert nicht, da distb keine Berichtsebene von irgendetwas ist. es ist die Analyseebene. In JMP gibt es einen Unterschied zwischen ihnen.
Um etwas aus der Ausgabe zu extrahieren, müssen Sie explizit auf die Berichtsebene verweisen.
Sieh dir das an: Extrahieren Sie Statistiken aus einer Analyse in einen Bericht Wenn Sie mehrere Ausgaben haben, müssen Sie sie richtig benennen und definieren, um sicherzustellen, dass Sie die gewünschten Werte erhalten.
lass uns wissen, ob es funktioniert. Andernfalls sollten Sie erwägen, einige Dateien und Skripte von dem Punkt bereitzustellen, der Ihnen Probleme bereitet.
alles Gute,
Ron
Betreff: Übergeben Sie Elemente aus berechneten Statistiken an bestimmte Koordinaten in einer gespeicherten Datentabelle@ron_horne . Vielen Dank. Ich habe einige Zeit gebraucht, um umzucodieren, damit ich es haben kann Offene "Results Table" für Werte aus berechneten Statistiken könnten daran weitergegeben werden.
Ich habe mit Ihrem Vorschlag begonnen und habe Gott eine Frage. Warum geht das nicht?
distb = Distribution( Continuous Distribution( Column( :height ) ) ) ;
// Extract min median max and SD
resultsdt[5, 7] = distb[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 11 ); // min
resultsdt[5, 8] = distb[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 6 ); // median
resultsdt[5, 9] = distb[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 1 ); // max
resultsdt[5, 10] = distb[Outline Box( "height" ), Outline Box( "Summary Statistics" ), Number Col Box( 1 )] << get( 2 ); // Std dev.
und warum muss das sein?
output = Report( dist = dt << Distribution( Continuous Distribution( Column( :height ) ) ) );
Ich habe mehrere Verteilungsdiagramme, denen ich leicht einen Namen zuweisen kann, z. B. distb1, distb2, ... aber wenn ich es brauche
output = Report( dist = dt << Distribution( ..... ) );
Ich muss überprüfen, wie sich dies auf den Rest meines Codes auswirkt.
Betreff: Übergeben Sie Elemente aus berechneten Statistiken an bestimmte Koordinaten in einer gespeicherten Datentabelle
Hi @Neo
Nach meinem besten Wissen gibt es in JMP keine Möglichkeit, Daten in eine Zelle einer geschlossenen Tabelle zu setzen.
Wenn es hier noch jemand besser weiß, lass es uns bitte wissen.
vielleicht kannst du als Vermittler eine andere Tabelle öffnen, um die Informationen dort zu halten, während du noch sammelst, und erst am Ende die endgültige Ergebnistabelle öffnen.
Ron
Betreff: Übergeben Sie Elemente aus berechneten Statistiken an bestimmte Koordinaten in einer gespeicherten DatentabelleVielen Dank @ron_horne . Ich denke, das würde funktionieren. Bevor ich dies jedoch an meinem eigentlichen Problem ausprobiere, habe ich eine Frage. Muss "Results Table" geöffnet werden, bevor die Werte übergeben werden können?
In meinem Fall ist die "Ergebnistabelle" eine gespeicherte Datei und ich hatte nicht vor, sie zu öffnen, es sei denn, es ist nicht möglich, Werte an sie weiterzugeben.
(Ich muss den Rest meines Codes ändern, wenn ich meine "Ergebnistabelle" in der Instanz öffnen muss, wenn Werte an sie weitergegeben werden.)
Betreff: Übergeben Sie Elemente aus berechneten Statistiken an bestimmte Koordinaten in einer gespeicherten DatentabelleHi @Neo
Sehen Sie, ob Sie das, was Sie brauchen, aus diesem Skript extrahieren können
Names Default To Here( 1 );
// set up a table to accept the results
resultsdt = New Table( "Results Table",
Add Rows( 20 ),
New Column( "Column 1" ),
New Column( "Column 2" ),
New Column( "Column 3" ),
New Column( "Column 4" ),
New Column( "Column 5" ),
New Column( "Column 6" ),
New Column( "Min", Numeric ),
New Column( "Median", Numeric ),
New Column( "Max", Numeric ),
New Column( "SD", Numeric )
);
// Open Data Table: Big Class.jmp
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// Launch platform: Distribution
output = Report( dist = dt << Distribution( Continuous Distribution( Column( :height ) ) ) );
// Extract min median max and SD
resultsdt[5, 7] = output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 11 ); // min
resultsdt[5, 8] = output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 6 ); // median
resultsdt[5, 9] = output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 1 ); // max
resultsdt[5, 10] = output[Outline Box( "height" ), Outline Box( "Summary Statistics" ), Number Col Box( 1 )] << get( 2 ); // Std dev.
Wenn es darum geht, Zahlen aus der Ausgabe zu extrahieren, muss man vorsichtig sein. Korrekte Verweise auf Speicherorte können sich ändern, wenn die Ausgabe aufgrund von Einstellungen unterschiedlich ist oder nur mehrere Ausgaben in einem Fenster enthält.
lass uns wissen, ob es funktioniert.
Ron
Betreff: Übergeben Sie Elemente aus berechneten Statistiken an bestimmte Koordinaten in einer gespeicherten DatentabelleIch finde Subskription von Datentabellen kann dir dabei helfen
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt[10,3] = "AAAAAAAAAAAAAA";