配布レポートを処理するときに便利なメソッドとプロパティを含むClassオブジェクトを作成しようとしています。
レポートやデータテーブルをフィルタしようとしないで問題を解決しようとすると問題が発生し始めます。
主な問題は、表示ツリーに移動して値を取得して保存するときにレポートをフィルタ処理した後に、フィルタを反映していないことです。 たとえば、分析している列のフィルタリング前の平均値が132、フィルタリング後の平均値が134の場合、平均値として134が表示されますが、表示ツリーには132が表示されます。
Make Distribution = Method({filter={}},
Try(
Column(dt,col) << Set Name("Data");
show(NItems(filter)!=0);
If(
NItems(filter)!=0,
dist = dt << Distribution(
Automatic Recalc( 1 ),
Continuous Distribution( Column( :Data ),
Local Data Filter(
Add Filter(Where(:Data >= filter[0] & :Data<= filter[1]))
)
),
),
dist = dt << Distribution(Automatic Recalc(1),Continuous Distribution(Column(:Data)));
);
rdist = dist << Report;
show(rdist[1]);
tmp = rdist["Summary Statistics"][NumberColBox(1)] << Get As Matrix;
mean = tmp[1];
stdev = tmp[2];
std_err_mean = tmp[3];
up_95_mean = tmp[4];
low_95_mean = tmp[5];
N = tmp[6];
dist_graph = rdist[OutlineBox("Data")][PictureBox(1)];
Column(dt,"Data") << Set Name(col);
,
Throw("Error in Making Distribution: "||char(exception_msg))
);
);上記は配布レポートを作成し、ローカルフィルタを追加し、表示ツリーから要約統計量の値を取得する方法です。
また、Select WhereおよびDelete Rowsルーチンを使用してみましたが、メソッドの内部にある場合、Select Whereは何もしていません。
Filter Table = Method({filter},
dt << Select Where(Column(dt,col)<FILTER>filter[2]);
dt << Delete Rows;
);</FILTER>配布レポートからさまざまな要約統計または要素を取得する必要がかなり頻繁にあるため、これを実行しています。これにより、構文が簡単になり、変更が容易になります。
私はこの記事に全クラスを添付しました。
任意の助けがいただければ幸いです。
こんにちは、
JMP 13でも同じような動作が見られたので応答しています。 アタッチされたデータフィルタを持っていたとき、私は値を取得して列に設定し、テーブルの並べ替えやテーブルの要約の操作をすることができましたが、行選択でランダムな結果を得ました。私の回避策は、列の値をベクトルとして取得し(数値列に対して分析が呼び出される)、loc()関数を使用することでした。それから私の計算をし、それに応じてテーブルの値を更新しました。
JMPサポートに連絡しました。あなたが説明した振る舞いは同じように思われるので、私は彼らにこのブログ記事を見るようにフラグを立てます。
@awsmagala 、
プラットフォームの適用後、データテーブルの構築の間にwaitを使用して少しの遅延を導入することをお勧めします。
Wait(0.1);