脚本按顺序运行我正在尝试从我的生存平台创建保存估计值,然后在新创建的表中获取估计值。问题是它不会等到生存表创建后再执行输出表达式。我尝试过完成、等待、不同的顺序等……但我无法让它工作,有什么建议吗?我有带 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);
);