腳本按順序運行我正在嘗試從我的生存平台創建我的保存估算,然後在新創建的表中獲取估算。問題是它不會等到Survival表創建好才執行Output表達式。我嘗試過完成、等待、不同的訂單等...但我無法讓它工作,有什麼建議嗎?我的 MacBook 上有 JMP 16.0。
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);內容組織資料混合與清理macOS大規模客製化可靠度分析分享和交流成果回复:腳本按順序運行您是否在 JMP 的日誌中收到任何錯誤消息? 在您給出的示例中,表達式名稱為 Sur,然後評估 Survival,不確定,這可能是問題嗎? 它應該導致錯誤,例如: Name Unresolved: Survival in access or evaluation of 'Survival' , Survival/*###*/
在更改 Eval(Survivor) -> Eval(Sur) 後,這似乎工作正常:
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);
在相當罕見的情況下,JMP 需要添加一些延遲,wait(0) 通常就足夠了(如果您有很多公式<< 運行公式可能有幫助)。
回复:腳本按順序運行我想我理解你想要做什麼——實際上你想要輸入窗口生存()成為平台模態-- 你希望它阻止腳本的執行,直到窗口關閉。您可以通過顯式定義窗口而不是依賴默認行為來做到這一點。在這裡,我創建了一個包含輸入字段的模式窗口,然後我抓取每個輸入並創建生存()具有正確輸入的表達式。
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>回复:腳本按順序運行那是我的一個錯字,我之前是正確的,但即使兩者匹配,它也對我不起作用。 我嘗試了等待,但沒有成功。 我沒有公式,我的整個腳本都被複製了。
回复:腳本按順序運行是的,這非常有效! 我過去做過模態窗口,但不知道如何在平台上做到這一點。 我嘗試了幾種方法,但都失敗了。 我想我沒想過只使用一個新窗口。
謝謝!
回复:腳本按順序運行我更喜歡@ErraticAttack的解決方案,但現在我在這裡正確理解了這個問題,這是另一種有時可能有效的方法。 將 On Close() 設置為平台窗口,然後它將執行您想要的任何操作。 由於取決於窗口名稱,這很容易出錯,但可以通過比較執行前後存在哪些窗口來使其更加健壯。
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);
);