一意の列値を取得し、それらを別のテーブルでのフィルタリング/クリーンアップに使用しますこんにちは。たとえば、配列内のキーを使用して、同じキーであるが異なる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:一意の列値を取得し、それらを別のテーブルでのフィルタリング/クリーンアップに使用します一意の値を取得するには、それらはすべて有効な方法であり、その速度はデータの量によって異なります。 注意すべきことは、一意の数値を取得する場合に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);データテーブルから値を選択するには、SelectwhereでContainsを使用できます。 使用できるので、行の選択を逆にする必要がない場合があります。 (または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;また、大量のデータがある場合、これはこれを行うための最も効率的な方法ではないかもしれませんが、おそらく最も簡単であり、私はそれから始めます。
Re:一意の列値を取得し、それらを別のテーブルでのフィルタリング/クリーンアップに使用しますありがとう、これは私を大いに助けました! 「大量のデータ」が実際に何を意味するのかわかりません。 私が開いている最初のテーブルには、今日約400行が含まれていますが、この数は、組織での検査情報管理システム(LIMS)の継続的な実装に伴って増加するはずです。 時間の経過とともに、数千、場合によっては数万の行が存在すると推測しています。 私がすべてを「クリーンアップ」している2番目のテーブルには、私にとって、無関係なサンプルIDにはすでに約50000行があります。
現在、ソリューションを実装したので、サンプルIDの配列を使用しています。 (私のスキルは非常に限られていると感じていますが、スクリプトは、コミュニティから「取り除いた」場合でも、解決策を見つけるときに非常に価値があり、満足のいくものだと感じています。 どうもありがとうございました。)
Re:一意の列値を取得し、それらを別のテーブルでのフィルタリング/クリーンアップに使用しますこれらのメソッドは、その量の行に対して高速になります。
私の頭に浮かんだもう1つの解決策があります。最初に要約テーブルを作成し、次にそれを、見つかった値を削除するテーブルに結合することができます。
例として、JMPのCars.jmpおよびCars1993.jmpサンプルデータを使用します。 Cars 1993は、Model列を使用してCarsをフィルタリングする1つのデータになります。
1.モデルをグループとしてCars1993からサマリーテーブルを作成します
2.次の設定を使用して、その新しいサマリーテーブルをCarsテーブルに結合します。

3.新しい一致フラグ列から、両方とメインの2つの値を確認できます。 両方とも、モデルが両方のデータセットから見つかることを意味します
Cars 1993で直接これを行うことができると思いますが、重複には注意する必要があります(テーブルで倍数をドロップすると、それが解決する可能性がありますが、確かではありません)。 また、この場合、(少なくともこの例では)重複するため、保持する列を選択する必要があります。

JMPがほとんどのスクリプトを実行できるため、これらはどちらもかなり簡単にスクリプトを作成できます。