进行提示时出错<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我是 JMP 新手,我在“Jump into JMP scripting”一书中找到了有关创建提示的好示例。
尽管如此,我仍然不知道如何创建一个简单的提示,并根据我从该提示中选择的值创建一个脚本子集。
提示应该从字符列变量“yearm”中“收集”值,例如我想根据 [201007, 201012] 之间的年月值创建图形生成器。
欢迎所有评论。 预先感谢您帮助我解决这个问题。
错误消息:在访问或评估 'Subscript' 、quarter[select1 << get] 时,下标无效(必须是数字或数字列表){1}
这是一些代码:
Summarize( 季度= By( Column( dt, "yearm" ) ) );
nw = 新窗口( "选择宿舍",
hb = 面板框( "选择年份",
select1 = 列表框(四分之一,
dt << 选择其中(
:yearm==quarter[select1 << get] );
selRows = dt << 获取选定行;
)
),
按钮框(“确定”,
nw << 关闭窗口;
dt << 选择其中(
:yearm==quarter[select1 << get]
);
/* 选定的行被子集到新表中。 */
dt << Subset( 输出表名称( "选择的宿舍" ) );
)
);
回复:提示时出错好的,我会尝试一下,当我的 JMP 更新到 10 时回复。 更新媒体已到达,但仍在等待。
非常感谢您,您是这方面的专业用户。 希望我也能学到一些东西。
回复:提示时出错哎哟! 那么 Contains() 将慢得令人痛苦。 我建议使用内置的 Data Filter() 作为提示的一部分。 对于大表来说,速度会快得多。
在 JMP 10 中尝试下面的示例(似乎不像在 JMP 9 中那样工作)。 对于 100 万行表 (MacPro 8x2.8 GHz),选择和子集设置几乎是瞬时的。
//示例表
dt =新表( “大的” ,
添加行( 1000000 ) ,
新专栏( “四分之一” ,名义上的,公式( 1 + 10 *圆形的(随机制服() / 3 , 1 ) ) )
) ;
dt <<运行公式() ;
柱子( “四分之一” ) <<删除公式;
//迅速的
df = dt <<数据过滤器(列( :四分之一) ) ;
RDF = df <<报告;
RDF [轮廓盒( 1 )] <<设置标题( “选择一个或多个季度” ) <<附加(
按钮盒( “制作子集” ,
dt <<子集(输出表名称( 《选择的年龄》 ) ) ;
df <<关闭,西北<<关闭
)
) ;
//可选定制:rdf[listbox(4)]<回复:提示时出错
谢谢两位给了我很好的建议,我很感激! 代码现在可以正常工作,但在使用 150 万行时有点慢。
回复:提示时出错是的,Contains() 函数在这里更优雅。 但如果在上面的示例中仅选择一项,则会出现错误。 大概是因为列表号[选择1 <<获取选定的索引]然后返回一个数字而不是数字列表。
这里
dt <<选择地点(包含(选择1 <<被选中,字符( :年龄) ) ) ;
效果更好,并且无论 :age 是字符还是数字都应该有效。
回复:提示时出错有一个方便的结构可以使用带有以下内容的列表来搜索列包含功能。下面的代码展示了如何使用它:
dt =打开( “$sample_data\big class.jmp” ) ;
总结(年龄列表=经过(柱子( dt , “年龄” ) ) ) ;
列表号= {} ;
为了(我= 1 ,我<=尼特姆斯(年龄列表) ,我++,
列表号[我] =编号(年龄列表[我]) ;
) ;
西北=新窗户( 「选择年龄」 ,
血红蛋白=面板盒( 「选择年龄」 ,
选择1 =列表框(
年龄列表,
dt <<选择地点(包含(列表号[选择1 <<获取选定的索引] , :年龄) ) ;
selRows = dt <<获取选定的行;
)
) ,
按钮盒( “好的” ,
dt <<选择地点(包含(列表号[选择1 <<获取选定的索引] , :年龄) ) ;
/* 选定的行被子集到新表中。 */
dt <<子集(输出表名称( 《选择的年龄》 ) ) ;
西北<<关闭窗口;
)
) ;
回复:提示时出错比较
:年==季度列表[选择1 <<得到]
不适用于多个值,因为它测试单元格值和列表的相等性。 它总是返回 false (我不认为单元格可以包含列表)。
做这件事有很多种方法。 这是一个建议(对于“确定”按钮脚本),其中行选择基于通过循环选定项目列表获得的行号矩阵。
按钮盒( “好的” ,
行= [] ;
L =季度列表[选择1 <<获取选定的指数] ;
为了(我= 1 ,我<= N 项( L ) ,我++,
行=行|| ( dt <<获取行,其中( :年== L [我] ))
) ;
/* 选定的行被子集到新表中。 */
dt <<子集(行(rows),输出表名( 《选定的宿舍》 ) ) ;
西北<<关闭窗口;
)
回复:提示时出错谢谢,现在当我只选择变量的一个值时,它可以正常工作,当我想通过按 Shitf 将变量的三个值选择为新数据时,我该怎么办?
回复:提示时出错用作列表索引时,方括号内的内容必须是数字(或数字列表)。 尝试一下
季度列表[选择1 <<获取选定的指数]
回复:提示时出错谢谢您的提示。
它仍然抱怨那些 [select1 << get] 点。
该变量yearm是一个字符变量,即使我将yearm设置为数字变量也没有帮助。
“在访问或评估 'Subscript' 时,下标无效(必须是数字或数字列表){1},quarter_list[select1 << get]”
回复:提示时出错我不会使用quarter 作为变量,因为它也是一个JMP 函数。也许是quarter_list?还可以尝试将关闭窗口语句放在最后。未测试代码:
总结(季度列表=经过(柱子( dt , “年” ) ) ) ;
西北=新窗户( 「选择宿舍」 ,
血红蛋白=面板盒( “选择年” ,
选择1 =列表框(
季度列表,
dt <<选择地点( :年==季度列表[选择1 <<得到] ) ;
selRows = dt <<获取选定的行;
)
) ,
按钮盒( “好的” ,
dt <<选择地点( :年==季度列表[选择1 <<得到] ) ;
/* 选定的行被子集到新表中。 */
dt <<子集(输出表名称( 《选定的宿舍》 ) ) ;
西北<<关闭窗口;
)
) ;