你好社区,
我昨天问了一个与此相关的问题并得到了很好的答案。 然而,我在尝试实施该解决方案时遇到了问题。 在花费了无数时间之后,我请求更多帮助。
这是场景。
我有一个数据表(附后),其中包含以下列和行:

1.我想从“水果”列开始一次循环遍历每一列,并按“位置”绘制逻辑图,并将输出发送到日志。
2. 我想完全删除使用 JSL 的绘图附带的摘要统计数据。
我可以毫无问题地执行步骤 1。 下面是我的代码:
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;
);我得到这个输出(还有更多带有摘要统计数据的图表,我只是无法将所有图表都放在这里):

我尝试实施以下解决方案来删除统计信息(基于我之前从 JMP 社区收到的帮助)。
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>当我运行此脚本时,出现无限循环并且必须终止 JMP。 当我将内部 for 循环放在外部时,没有任何反应,摘要统计信息不会被删除。
有人能帮我吗?
谢谢。
简单的解决方案。脚本中的第二个 For() 循环位于第一个 For() 循环内,它们都使用“i”作为索引变量。因此,第二个循环不断地将 i 的值设置回小于外部(第一个)循环中的停止值的值。
这是简单的修复
Names Default To Here( 1 );
dt = data table( "fruit_drink" );
colList = dt << Get Column Names();
jrn = New Window( "The Journal", <<JOURNAL></JOURNAL>
在我对我提交的代码的测试中它没有这样做。可以贴一下你的数据表吗?我认为问题是数据问题,如果我有您的数据表的副本,我可以进一步查看。
嗨特克斯尼尔森,
感谢您抽出时间来帮助我。 看起来你的解决方案很接近我想要的。 唯一的问题是运行脚本时,JMP 会进入无限循环。 它不断地将图表附加到日记中,却不停地迫使我终止会话。
谢谢。
您的代码存在一些问题
- 您确实应该添加为代码中的第一行
Names Default To Here( 1 );
它可以防止此脚本中的变量干扰其他脚本中的同名变量
- 您尝试在创建对象和变量之前或删除它们之后使用它们
obj << journal;
jrn = New Window( "The Journal", <<JOURNAL></JOURNAL>
上述案例说明了在创建日记之前尝试向日记发送内容obj << close window;
For( i = 1, i <= N Items( obj ), i++,
jrn["Iterations"] << delete;
jrn["Whole Model Test"] << delete;
jrn["Parameter Estimates"] << delete;);
);
在这种情况下,您正在引用刚刚删除的对象
- 我发现在某些情况下,没有 Iterations 表,代码会出错,因此我在一些语句周围添加了 Try() 函数。
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 );
Try() 函数执行它所说的操作,它只是“尝试”执行该语句,但如果它不能执行该操作,它就会继续执行。
- 您似乎还尝试了第二种将代码添加到日志中的方法。
obj << journal;
jrn = New Window( "The Journal", <<JOURNAL></JOURNAL>
我认为它不是必需的,只是因为在创建日记之前尝试上传到日记的问题。
所以这里是你的代码的重写。
Names Default To Here( 1 );
dt = Open( "$\fruit_drink.jmp" );
colList = dt << Get Column Names();
jrn = New Window( "The Journal", <<JOURNAL></JOURNAL>