Hallo Community,
Ich hatte gestern eine verwandte Frage dazu gestellt und tolle Antworten erhalten. Beim Versuch, die Lösung umzusetzen, stieß ich jedoch auf Probleme. Nachdem ich unzählige Stunden damit verbracht habe, bitte ich um weitere Hilfe.
Hier ist das Szenario.
Ich habe eine Datentabelle (im Anhang) mit den folgenden Spalten und Zeilen:

1. Ich möchte jede Spalte nacheinander durchlaufen, beginnend mit der Spalte „Frucht“, ein Logistikdiagramm nach „Standort“ zeichnen und die Ausgabe an ein Journal senden.
2. Ich möchte die zusammenfassenden Statistiken, die mit den Diagrammen mit JSL geliefert werden, vollständig entfernen.
Ich kann Schritt 1 ohne Probleme durchführen. Unten ist mein Code:
dt=open("$\fruit_drink.jmp");
colList = dt << Get Column Names();
For( i = 3, i <= Nitems( colList ), i++,
obj = Logistic(
Y( colList[i] ),
X( :Day ),
By( :location),
SendToReport(
Dispatch( {}, "1", ScaleBox, {Min( 35.2151394422311 )} ),
Dispatch(
{},
"FitNom Plot",
FrameBox,
{Marker Size( 4 ), Row Legend(
colList[i],
Color( 1 ),
Color Theme( "JMP Default" ),
Marker( 1 ),
Marker Theme( "Standard" ),
Continuous Scale( 0 ),
Reverse Scale( 0 ),
Excluded Rows( 0 )
)}
)
)
);
obj << journal;
);Ich erhalte diese Ausgabe (es gibt mehr Diagramme mit zusammenfassenden Statistiken, ich kann sie einfach nicht alle hier unterbringen):

Ich habe versucht, die folgende Lösung zum Entfernen der Statistiken zu implementieren (basierend auf früherer Hilfe, die ich von der JMP-Community erhalten habe).
dt=open("$\fruit_drink.jmp");
colList = dt << Get Column Names();
For( i = 3, i <= Nitems( colList ), i++,
obj = Logistic(
Y( colList[i] ),
X( :Day ),
By( :location),
SendToReport(
Dispatch( {}, "1", ScaleBox, {Min( 35.2151394422311 )} ),
Dispatch(
{},
"FitNom Plot",
FrameBox,
{Marker Size( 4 ), Row Legend(
colList[i],
Color( 1 ),
Color Theme( "JMP Default" ),
Marker( 1 ),
Marker Theme( "Standard" ),
Continuous Scale( 0 ),
Reverse Scale( 0 ),
Excluded Rows( 0 )
)}
)
)
);
obj << journal;
jrn = New Window( "The Journal", <<JOURNAL></JOURNAL>Wenn ich dieses Skript ausführe, erhalte ich eine Endlosschleife und musste JMP beenden. Wenn ich die inneren for-Schleifen nach außen lege, passiert nichts, die Zusammenfassungsstatistiken werden nicht entfernt.
Kann mir jemand helfen?
Danke.
einfache Lösung.Die zweite For()-Schleife im Skript befindet sich innerhalb der ersten For()-Schleife und beide verwendeten „i“ als Indexvariable.Die zweite Schleife setzte also den Wert von i kontinuierlich auf einen Wert zurück, der kleiner als der Stoppwert in der äußeren (ersten) Schleife war.
Hier ist die einfache Lösung
Names Default To Here( 1 );
dt = data table( "fruit_drink" );
colList = dt << Get Column Names();
jrn = New Window( "The Journal", <<JOURNAL></JOURNAL>
Hallo Txnelson,
Im Anhang ist meine Datentabelle. Das ist seltsam, dass es bei dir gut läuft.
Danke.
Dies ist bei meinen Tests des von mir übermittelten Codes nicht der Fall.Können Sie Ihre Datentabelle veröffentlichen?Ich gehe davon aus, dass es sich um ein Datenproblem handelt, und wenn ich eine Kopie Ihrer Datentabelle hätte, könnte ich weiter suchen.
Hallo Txnelson,
Vielen Dank, dass Sie sich die Zeit genommen haben, mir zu helfen. Es sieht so aus, als ob Ihre Lösung meinen Wünschen nahe kommt. Das einzige Problem besteht darin, dass JMP beim Ausführen des Skripts in einer Endlosschleife läuft. Es werden weiterhin Diagramme an das Journal angehängt, ohne dass es aufhört, und zwingt mich, die Sitzung abzubrechen.
Danke.
Es gibt ein paar Probleme mit Ihrem Code
- Sie sollten es wirklich als erste Zeile in Ihren Code einfügen
Names Default To Here( 1 );
Dadurch wird verhindert, dass Ihre Variablen in diesem Skript die gleichnamigen Variablen in anderen Skripten beeinträchtigen
- Sie versuchen, Objekte und Variablen zu verwenden, bevor sie erstellt oder nachdem sie gelöscht wurden
obj << journal;
jrn = New Window( "The Journal", <<JOURNAL></JOURNAL>
Der obige Fall veranschaulicht den Versuch, etwas an ein Journal zu senden, bevor Sie das Journal erstellt habenobj << close window;
For( i = 1, i <= N Items( obj ), i++,
jrn["Iterations"] << delete;
jrn["Whole Model Test"] << delete;
jrn["Parameter Estimates"] << delete;);
);
Und in diesem Fall verweisen Sie auf ein Objekt, das Sie gerade gelöscht haben
- Ich habe festgestellt, dass es in manchen Fällen keine Iterationstabelle gibt und der Code einen Fehler verursacht, daher habe ich um einige der Anweisungen eine Try()-Funktion hinzugefügt.
For( i = 1, i <= N Items( obj ), i++,
Try( jrn["Iterations"] << delete );
Try( jrn["Whole Model Test"] << delete );
Try( jrn["Parameter Estimates"] << delete );
);
Try( obj << close window );
Die Try()-Funktion macht, was sie sagt, sie „versucht“ nur, die Anweisung auszuführen, aber wenn sie es nicht kann, macht sie einfach weiter.
- Sie scheinen auch eine zweite Möglichkeit versucht zu haben, Ihren Code zum Journal hinzuzufügen.
obj << journal;
jrn = New Window( "The Journal", <<JOURNAL></JOURNAL>
Ich gehe davon aus, dass dies nicht erforderlich ist und nur deshalb vorhanden ist, weil versucht wird, es in das Journal hochzuladen, bevor es erstellt wurde.
Hier ist also eine Überarbeitung Ihres Codes.
Names Default To Here( 1 );
dt = Open( "$\fruit_drink.jmp" );
colList = dt << Get Column Names();
jrn = New Window( "The Journal", <<JOURNAL></JOURNAL>