嗨,
我正在尝试学习如何将向量传递给data filter命令的where子句。我试图解决这个问题,因为我似乎无法在where子句中获得小于等于语句的功能。但是传递Where(:columnname == {1,2})确实有效。它看起来应该很简单,但最终证明是错误的,我无法弄清楚正确的语法。示例代码如下所示。
GE_Table = Current Data Table();
GE_Table << DataFilter(Add Filter(
columns(:SUSPECT_COUNT,:SYMPTOM_COUNT),
Where( :SYMPTOM_COUNT == 1),
Where( :SUSPECT_COUNT <=2 ), //this doesn't work but Where( :SUSPECT_COUNT == {1,2}) does...?????
show window(0)
)
);有任何想法吗?
谢谢你的回复。对于我来说,列类型切换为连续是最简单的修复,但这些示例有助于查看更多代码示例。再次感谢!
我认为你正在遇到一个建模类型的问题。
suspect_count列是名义上的,对吧?因为它的名义赋予它一个值列表的作品。(它是一个列表,因为它在大括号中。)如果列是数字连续的,那么你的脚本就可以了。
看一下这个脚本。
年龄是数字标称,在我的过滤器中我选择了12和14(曲线括号,列分隔)。但是,权重是数字连续的,所以不等式“<= 100”有效。 排序语法的一种快速方法是手动构建过滤器,然后从行过滤器中的红色三角形菜单中将脚本保存到剪贴板或脚本窗口。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Data Filter(
Add Filter(
columns( :weight, :age ),
//Where( :weight >= col minimum(:weight) & :weight <= 100 ),
Where( :weight <= 100 ),
Where( :age == {12, 14} ),
Display( :age, Blocks Display )
)
);
注释行注释(“//”):这只是为了表明该值可以来自列(或任何评估的eles)
那么对于稍长的问题,“如何将值传递到列表中然后使用过滤器中的列表?” (请原谅hevy释义)
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Summarize( age_levels = By( :age) );
show(age_levels);
parse(age_levels[2]);//second thing in the list of age_levels, returns a number
age_list={};//empty list
insert into(age_list,parse(age_levels[2]));//second thing in the list of age_levels, "parse" returns a number not a quoted string
insert into(age_list,parse(age_levels[4]));//add 4th thing
show(age_list);//look at the log to see the values
dt << Data Filter(
Add Filter(
columns( :weight, :age ),
Where( :weight <= 100 ),
Where( :age == age_list ),//note the list gets evaluated here
Display( :age, Blocks Display )
)
);
在JMP脚本窗口中,此脚本可能更容易阅读。
问题是您要过滤的列不是连续列,而是序数列或标称列。 因此,过滤器的方法不同。