我無法讓Column Stats在循環中工作?我正在嘗試編寫一個腳本,通過使用循環查看每個列名稱並將其傳遞給具有以下代碼行以計算出第99個百分位數的函數,從表中的多個列中刪除異常值。
test_upper_quantile = Col分位數(列(Test_Number),0.99);
然後,我使用For Each Row循環將值與計算的百分位進行比較,並刪除任何超出此範圍的行。
如果我只做一列,代碼工作正常但是如果我設置循環使用多列將列名稱讀入Test_Number變量,jmp總是使用首先為第一列計算的分位數的值,它不會為每列重新計算。循環看起來正確設置,因為它在日誌中顯示變量Test_Number,並且此更改將按預期與列匹配。所以,如果我做10列,我會顯示10個正確的列名,但只有第一列的分位數重複10次!
此外,當腳本完成時,如果我突出顯示下面的代碼行,它會計算它正確遇到的最後一列的值。
test_upper_quantile = Col分位數(列(Test_Number),0.99);
我已經嘗試清除全局test_upper_quantile,它在函數的開頭保存了分位數值,但這沒有區別?
有任何想法嗎?我確實注意到當你將光標懸停在列分位數指令上時它會說它被緩存了。這是我的問題,如果有辦法清除緩存?
顯示完整的功能
remove_outliers = Function({Test_Number},
顯示(test_number);
test_lower_quantile = Col分位數(列(Test_Number),0.01);
test_upper_quantile = Col分位數(列(Test_Number),0.99);
顯示(test_upper_quantile);
lower_cutoff = test_lower_quantile;
upper_cutoff = test_upper_quantile;
對於每一行(
如果(列(test_number)[] 排除(行狀態())= 1
);
如果(Column(test_number)[]> upper_cutoff,
排除(行狀態())= 1
);
);
);
消息由:apeden編輯Re:我無法讓Column Stats在循環中工作?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />嘗試使用As Column()函數將您從Col List Box中獲得的內容轉換為<< get selected to a column reference。
名稱默認為此處 ( 1 ) ;
DT = 打開 ( “$ SAMPLE_DATA / solubility.jmp” ) ;
NW = 新窗戶 ( “為分位數選擇列” ,
磅 = Col List Box ( 所有 ) ,
按鈕框 ( “好” ,
COLS = 磅 << 被選中 ;
NW << 關閉窗口 ;
)
) ;
對於 ( 一世 = 1 ,一世 <= N項 ( COLS ) ,一世 ++,
節目 ( Col分位數 ( 作為專欄 ( COLS [ 一世 ] ) , 0.5 ) )
) ;
-Jeff
Re:我無法讓Column Stats在循環中工作?傑夫,你好
你的代碼也適合我。 它與我的代碼非常相似,我能看到的唯一區別是如何生成列名列表。從對話框窗口,我使用:
| | | | ButtonBox(“OK”, |
| | | | | yParamNames = colListY << get Items; |
它返回一個字符串列表,每個列名都用引號。 colListY是由用戶填充的列列錶框。
我找到了一個馬馬虎虎的解決方法。它抓住了列中的所有內容,而不是讓JMP完成工作。 我看到的變通方法的缺點是它不會忽略隱藏和排除的數據,除非我手動編程。
tempList1 = {} ; tempList1 = 柱 ( dtData , yParamList [ 一世 ]) << 得到矩陣 ; medVal [ 一世 ] = 位數 ( 0.5 , tempList1 ) ; q1Val [ 一世 ] = 位數 ( 0.25 , tempList1 ) ; q3Val [ 一世 ] = 位數 ( 0.75 , tempList1 ) ; // medVal = col quantile(列(dtData,yParamList ),0.5); // q1Val = col quantile(列(dtData,yParamList ),0.25); // q3Val = col quantile(列(dtData,yParamList ),0.75); | |
Re:我無法讓Column Stats在循環中工作?也許你可以發布一些導致你困難的代碼。
這對我有用:
DT = 打開 ( “$ SAMPLE_DATA / Solubility.jmp” ) ;
NC = DT << 獲取列名稱 ( 數字 ) ;
對於 ( 一世 = 1 ,一世 <= NITEMS ( NC ) ,一世 ++,
節目 ( col分位數 ( 柱 ( NC [ 一世 ]) , 0.5 )) ;
) ;
/ *:
Col Quantile(列(nc ),0.5)= 1.36;
Col Quantile(列(nc ),0.5)= 1.21;
Col Quantile(列(nc ),0.5)= 0.95;
Col Quantile(列(nc ),0.5)= 0.445;
Col Quantile(列(nc ),0.5)= -0.015;
Col Quantile(列(nc ),0.5)= - 0.62;
Re:我無法讓Column Stats在循環中工作?我知道這篇文章已經有好幾年了,但有沒有解決這個問題的方法呢?我看到完全相同的事情。 在循環中使用col quantile將導致僅將循環的第一次迭代存儲到我的列表中。
是否有解決方案來獲取不涉及col quantile()函數的分位數數據?我真的不想做匯總表(用分位數據匯總)因為它會增加數千列的執行時間。
謝謝