Column Statsをループで機能させることができません。ループを使用して各列名を調べ、これを99パーセンタイルを算出する次のコード行を含む関数に渡すことによって、テーブル内の複数の列から外れ値を削除するスクリプトを作成しようとしています。
test_upper_quantile = Col Quantile(列(Test_Number)、0.99);
次に、For Each Rowループを使用して、計算されたパーセンタイルと値を比較し、この範囲外の行を削除します。
1列だけを実行してもコードは正常に動作しますが、列名をTest_Number変数に読み込んで複数列でループを設定すると、jmpは常に最初の列に対して最初に計算された分位点の値を使用します。。ループは変数Test_Numberをログに表示するので、ループは正しくセットアップされているように見え、これは予想されるように列と一致するように変更されます。したがって、10列を処理すると、正しい10列の名前が表示されますが、最初の列の分位点のみが10回繰り返されます。
以下のコード行をハイライトしてもスクリプトが終了すると、最後に見つかった最後の列の値も正しく計算されます。
test_upper_quantile = Col Quantile(列(Test_Number)、0.99);
関数の先頭にある分位点の値を保持するグローバルなtest_upper_quantileをクリアしようとしましたが、違いはありません。
何か案は?あなたがカーソルをカラムの分位点コマンドの上に置くと、それがキャッシュされると言っています。キャッシュをクリアする方法がある場合、これは私の問題ですか?
完全な機能が示されています
remove_outliers =関数({Test_Number}、
show(test_number);
test_lower_quantile = Col Quantile(列(Test_Number)、0.01);
test_upper_quantile = Col Quantile(列(Test_Number)、0.99);
show(test_upper_quantile);
lower_cutoff = test_lower_quantile;
upper_cutoff = test_upper_quantile;
各行について(
(Column(test_number)[] 除外(行の状態())= 1
;
(Column(test_number)[]> upper_cutoffの場合)
除外(行の状態())= 1
;
;
;
メッセージはapedenによって編集されました。再:Column Statsをループで動かすのに問題がありますか?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />As Column()関数を使用して、Col List Box()から選択した内容を列参照に変換します。
ここにデフォルトの名前 ( 1 ) ;
dt = 開いた ( "$ SAMPLE_DATA / soluble.jmp" ) ;
nw = 新しい窓 ( "分位数の列の選択" 、
ポンド = Colリストボックス ( すべて ) 、
ボタンボックス ( "OK" 、
コルズ = ポンド << 選択される ;
nw << ウィンドウを閉じる ;
)
) ;
にとって ( 私 = 1 、私 <= N個のアイテム ( コルズ ) 、私 ++、
見せる ( コル分位 ( 列として ( コルズ [ 私 ] ) 、 5 ) )
) ;
- ジェフ
再:Column Statsをループで動かすのに問題がありますか?こんにちはジェフ、
あなたのコードは私にも働きます。 それは私のコードに非常に似ています、私が見ることができる唯一の違いはカラム名リストがどのように生成されるかということです。ダイアログボックスのウィンドウから、私は使用します:
| | | | ButtonBox( "わかりました"、 |
| | | | | yParamNames = colListY << getアイテム。 |
各列名を引用符で囲んだ文字列のリストを返します。 colListYは、ユーザーによって入力される列リストボックスです。
私はまあまあの回避策を見つけました。JMPに作業を任せるのではなく、すべてをコラムで把握します。 私が見る回避策のマイナス面は、私が手動でそれをプログラムしない限り、隠されたデータと除外されたデータを無視しないことです。
tempList1 = {} ; tempList1 = カラム ( dtData 、 yParamList [ 私 ]) << 行列として取得 ; medVal [ 私 ] = 分位点 ( 0.5 、 tempList1 ) ; q1Val [ 私 ] = 分位点 ( 0.25 、 tempList1 ) ; q3Val [ 私 ] = 分位点 ( 0.75 、 tempList1 ) ; // medVal = col quantile(column(dtData、yParamList )、0.5)。 // q1Val = col quantile(column(dtData、yParamList )、0.25)。 // q3Val = col quantile(column(dtData、yParamList )、0.75)。 | |
再:Column Statsをループで動かすのに問題がありますか?たぶん、あなたはあなたを困難にするようなコードを投稿することができます。
これは私のために働く:
dt = 開いた ( "$ SAMPLE_DATA / Solubility.jmp" ) ;
NC = dt << 列名を取得する ( 数値 ) ;
にとって ( 私 = 1 、私 <= 項目 ( NC ) 、私 ++、
見せる ( 列分位数 ( カラム ( NC [ 私 ]) 、 5 )) ;
) ;
/ *:
コル分位数(列(nc) )、0.5)= 1.36。
コル分位数(列(nc) )、0.5)= 1.21。
コル分位数(列(nc) )、0.5)= 0.95。
コル分位数(列(nc) )、0.5)= 0.445。
コル分位数(列(nc) )、0.5)= - 0.015。
コル分位数(列(nc) )、0.5)= - 0.62。
再:Column Statsをループで動かすのに問題がありますか?私はこの記事が年をとっていることを知っています、しかしこの問題に対する解決策はありますか?私はまったく同じことを見ています。 ループ内でcol変位値を使用すると、ループの最初の繰り返しのみが私のリストに格納されます。
col quantile()関数を含まない分位点データを取得するための回避策はありますか?要約テーブル(変位データを使用した要約)は、実際には実行したくありません。数千列の実行時間が長くなるからです。
ありがとう