一意の列値を取得し、別のテーブルでのフィルタリング/クリーンアップに使用しますこんにちは。たとえば、異なる JMP テーブルにある同じキーを持つ行を選択またはフィルタリングするために配列内のキーを使用する場合、どのようなアプローチになりますか。テーブルが 2 つあります。そのうちの 1 つは、化学試験のサンプル ID をさまざまな要素設定 (温度、時間、研究番号など) にマッピングします。配列内のサンプル ID を正常に取得できました。 (申し訳ありませんが、私はこれに関して全くの初心者です。)
smplID = Associative array(:sampleid) << Get Keys;
ここで、これらのキーを使用して 2 番目のテーブル (応答がある場所) の行を選択し、行の選択を反転して行を削除したいと思います。 このリファレンスは、これまでのところ、私をどこにも導きませんでした。おそらく以下の解決策があり、ここで説明されているように、から始めるのに適しています?
Summarize(dt, smpleID = by(:sampleid));
それとも、 このアプローチの方が望ましいでしょうか?
dt << Summary (Group ( :sampleid ), Frequ( "None" ), Weight( "None" );
とにかく、私が本当に知りたいのは、データ分析をさらに進める前に、これらのアプローチのいずれかを使用して、データ テーブル内の不要な行を効果的にクレンジングする方法です。ループする方法を学ぶ必要があると思います。
はい、可能な限りスクリプト ガイドを読むようにしています。ただ優先順位を付けることができません。
マスカスタマイゼーションRe: 一意の列値を取得し、それらを別のテーブルでのフィルタリング/クリーンアップに使用しますそれが問題です。 テーブルの操作には細心の注意を払う必要があります。 そうしないと、いくつかの複製測定値を置き忘れる可能性があります。 したがって、概要を維持するのに役立つため、事前にテーブルをクリーンアップしようとしています。
Re: 一意の列値を取得し、それらを別のテーブルでのフィルタリング/クリーンアップに使用しますこれらのメソッドは、その量の行に対して高速になります!
私の頭に浮かんだもう1つの解決策があります。最初にサマリーテーブルを作成し、それをテーブルに結合して、見つかった値を削除することができます。
JMP の Cars.jmp と Cars 1993.jmp のサンプル データを例として使用します。 Cars 1993 は、Model 列を使用して Cars をフィルター処理する 1 つのデータになります。
1. モデルをグループとして Cars 1993 からサマリー テーブルを作成します。
2. 次の設定で、その新しいサマリー テーブルを Cars テーブルに結合します。

3. 新しいマッチ フラグ列から、Both と Main の 2 つの値を確認できます。 Both は、両方のデータセットからモデルを見つけることができることを意味します
Cars 1993 で直接これを行うことができると思いますが、重複には注意する必要があります (Drop multiples With Table で解決するかもしれませんが、確かではありません)。 また、この場合、重複があるため、保持する列を選択する必要があります(少なくともこの例では)。

JMPはほとんどのスクリプトを実行できるため、これらのスクリプトはどちらも非常に簡単に作成できます。
Re: 一意の列値を取得し、それらを別のテーブルでのフィルタリング/クリーンアップに使用しますありがとう、これは私を大いに助けました! 「大量のデータ」が実際に何を意味するのかわかりません。 私が開いている最初のテーブルには、現在約 400 行が含まれていますが、この数は、私たちの組織でラボ情報管理システム (LIMS) が継続的に実装されているため、増加することは間違いありません。 時間の経過とともに数千行、場合によっては 1 万行になると思います。 私がすべて「掃除」している 2 番目のテーブルには、無関係なサンプル ID が既に約 50,000 行あります。
現在、ソリューションを実装したので、サンプル ID の配列を使用しています。 (自分のスキルは非常に限られていると感じていますが、スクリプト作成は依然として非常に価値があり、解決策を見つけたときは満足感があり、コミュニティから「引き裂かれた」場合でも. それでは、今後ともよろしくお願いいたします。)
Re: 一意の列値を取得し、それらを別のテーブルでのフィルタリング/クリーンアップに使用します一意の値を取得するには、これらすべてが有効な方法であり、その速度はデータの量によって異なります。 注意すべきことの 1 つは、一意の数値を取りたい場合に Summarize を使用する場合、それらを数値に戻す必要があることです (Summarize はそれらを文字列として返します)。
一意の値を取得するいくつかの異なる方法:
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
aa_uniq = Associative Array(dt:age) << get keys;
Summarize(dt, summarize_uniq = by(:age));
dt_summary = dt << Summary(Group(:age), Freq("None"), Weight("None"), private);
summary_uniq = Column(dt_summary, 1) << get as matrix;
Close(dt_summary, no save);
Show(aa_uniq, summarize_uniq, summary_uniq);データテーブルから値を選択するには、contains を select where と共に使用できます。 ! を使用できるので、行の選択を反転する必要はないかもしれません。 (または Not()) を使用して、関数から取得した結果を否定します。 デモンストレーションのためだけに待機しています。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
names_of_interest = {"KATIE", "LILLIE", "JOHN"};
wait(2);
dt << Select Where(Contains(names_of_interest, :name)) << Invert Row Selection << Hide and Exclude(1);// << clear select;
//Remove selections
wait(2);
dt << Clear Row States;
wait(2);
dt << Select Where(!Contains(names_of_interest, :name)) << Hide and Exclude(1);// << clear select;また、大量のデータがある場合、これは最も効率的な方法ではないかもしれませんが、おそらく最も簡単であり、私はそれから始めます.