Skript sequenziell ausführenIch versuche, meine Save Estimates von meiner Survival-Plattform aus zu erstellen und dann die Schätzungen in der neu erstellten Tabelle abzurufen. Das Problem besteht darin, dass nicht gewartet wird, bis die Survival-Tabelle erstellt ist, bevor der Ausgabeausdruck ausgeführt wird. Ich habe „Fertigstellen“, „Warten“, „Andere Reihenfolgen“ usw. ausprobiert, aber ich bekomme das nicht zum Laufen. Irgendwelche Vorschläge? Ich habe JMP 16.0 mit MacBook.
Names Default To Here( 0 );
Clear Log();
dt = Current Data Table();
If( Not( Is Scriptable( dt ) ),
dtsel = Pick File( "Open File", {"JMP|jmp", "All files|*"} );
If( dtsel == "",
Stop(),
Try( dt = Open( dtsel ), Stop() )
);
);
Sur = Expr(
Obj = dt << Survival(
Failure Plot( 1 ),
Show Points( 1 ),
Show Shaded Simultaneous CI( 1 ),
Show Simultaneous CI( 1 ),
Weibull Fit( 1 )
//Save Estimates
);
dtname = Data Table( dt ) << Get Name;
Show( dtname );
obj << Save Estimates;
wait(1);
);
Eval( Survival );
Output = Expr(
dt2 = Data Table( dtname || " Survival");
columnnamegroup = Column( dt2, 1 ) << Get Name;
Groups = Column( dt2, columnnamegroup ) << Get As Matrix;
Show( Groups );
);
Eval(Output);InhaltsorganisationDatenzusammenführung und -bereinigungmacOSMassenanpassungZuverlässigkeitsanalyseErgebnisse teilen und kommunizierenBetreff: Skript wird sequentiell ausgeführtErhalten Sie eine Fehlermeldung im Protokoll von JMP? In dem Beispiel, das Sie gegeben haben, haben Sie den Namen Sur für den Ausdruck und werten dann Survival aus, nicht sicher, könnte das das Problem sein? Es sollte zu einem Fehler wie dem folgenden führen: Name Unresolved: Survival in access or evaluation of 'Survival' , Survival/*###*/
Dies scheint gut zu funktionieren, nachdem Eval (Survivor) -> Eval (Sur) geändert wurde:
Names Default To Here(0);
dt = Open("$SAMPLE_DATA/Rats.jmp");
Sur = Expr(
obj = dt << Survival(Y(:days), Censor(:Censor), Grouping(:Group));
dtname = Data Table(dt) << Get Name;
obj << Save Estimates;
);
Eval(Sur);
Output = Expr(
dt2 = Data Table(dtname || " Survival");
columnnamegroup = Column(dt2, 1) << Get Name;
Groups = Column(dt2, columnnamegroup) << Get As Matrix;
Show(Groups);
);
Eval(Output);
In den ziemlich seltenen Fällen, in denen JMP eine Verzögerung hinzufügen muss, reicht wait(0) normalerweise aus (und wenn Sie viele Formeln haben << Formeln ausführen könnte helfen).
Betreff: Skript wird sequentiell ausgeführtIch glaube, ich verstehe, was Sie versuchen - effektiv möchten Sie das Eingabefenster für die Überleben() Plattform zu sein Modal - Sie möchten, dass die Ausführung des Skripts blockiert wird, bis das Fenster geschlossen wird.Sie können dies tun, indem Sie explizit ein Fenster definieren, anstatt sich auf das Standardverhalten zu verlassen.Hier habe ich ein modales Fenster erstellt, das die Eingabefelder enthält, dann nehme ich jede Eingabe und erstelle die Überleben() Ausdruck mit den richtigen Eingaben.
Names Default To Here( 1 );
dt = Current Data Table();
If( Not( Is Scriptable( dt ) ),
dtsel = Pick File( "Open File", {"JMP|jmp", "All files|*"} );
If( dtsel == "",
Stop(),
Try( dt = Open( dtsel ), Stop() )
);
);
dtname = Data Table( dt ) << Get Name;
validated = 0;
New Window( "Inputs",
<<MODAL></MODAL>Betreff: Skript wird sequentiell ausgeführtJa das funktioniert einwandfrei! Ich habe in der Vergangenheit modale Fenster erstellt, wusste aber nicht, wie ich das mit der Plattform machen sollte. Ich habe ein paar Möglichkeiten ausprobiert und bin gescheitert. Ich denke, ich habe nicht daran gedacht, einfach ein neues Fenster zu verwenden.
Vielen Dank!
Betreff: Skript wird sequentiell ausgeführtDas war ein Tippfehler meinerseits, ich hatte es vorher richtig, aber es hat bei mir nicht funktioniert, auch wenn die beiden übereinstimmten. Ich habe versucht zu warten und es hat nicht funktioniert. Ich habe keine Formeln, mein gesamtes Skript wurde kopiert.
Betreff: Skript wird sequentiell ausgeführtIch bevorzuge viel @ErraticAttack 's Lösung, aber jetzt, wo ich die Frage richtig verstehe, ist hier eine andere Methode, die manchmal funktionieren könnte. Setzen Sie On Close() auf das Plattformfenster, das dann alles ausführt, was Sie wollen. Dies ist aufgrund der Abhängigkeit von Fensternamen ziemlich fehleranfällig, könnte jedoch etwas robuster gemacht werden, indem verglichen wird, welche Fenster vor und nach der Ausführung vorhanden sind.
Names Default To Here(0);
dt = Open("$SAMPLE_DATA/Rats.jmp");
Sur = Expr(
obj = dt << Survival();
Window("Survival / Reliability") << On Close(Output);
);
Eval(Sur);
Output = Expr(
dtname = Data Table(dt) << Get Name;
For Each({window_name}, Get Window List() << Get Window Title,
If(Contains(window_name, Eval Insert("^dtname^ - Survival of ")),
cur_w = Window(window_name);
break();
);
);
obj = cur_w[OutlineBox(1)] << Get Scriptable Object;
obj << Save Estimates;
dt2 = Data Table(dtname || " Survival");
columnnamegroup = Column(dt2, 1) << Get Name;
Groups = Column(dt2, columnnamegroup) << Get As Matrix;
Show(Groups);
);