嗨,
我正在嘗試學習如何將向量傳遞給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腳本窗口中,此腳本可能更容易閱讀。
問題是您要過濾的列不是連續列,而是序數列或標稱列。 因此,過濾器的方法不同。