やあ、
Violation 列の値が 1 であるすべての行を選択し、Device 列の値を抽出して、それらのデバイスに関連付けられているすべての行を除外しようとしています。スクリプトを考えるのを手伝ってくれる人はいますか?ありがとう!
以下はこのアクションを実行するスクリプトです
Names Default To Here(1);
dt = Current Data Table();
dt << Clear Row States;
violation_rows = dt << Get Rows Where(:Violation == 1);
violation_devices = Associative Array(dt[violation_rows, "Device"]) << get keys;
dt << Select Where(Contains(violation_devices, :Device)) << Exclude(1) << Clear Select;
- :Violation == 1 の行番号を取得します
- データテーブルの添字と連想配列を使用してデバイスを取得します
- それらのデバイスを含む行を選択して除外します
これは対話的に簡単に実行することもできます (これは拡張ログに記録されます)。
- グループとしてデバイス、サブグループとして違反を含む概要テーブルを作成します。 また、テーブルがリンクされていることを確認してください
- N(1) から 0 の値を選択し (検証 == 1 であることを示します)、行を右クリックして選択を反転します。
- これで、メインテーブルでデバイスが選択されました
- これらの行を除外できるようになりました
JMP は次のようなスクリプトを作成します
// Open Data Table: Sample(1).jmp
// → Data Table("Sample(1)")
Open("$DOWNLOADS/Sample(1).jmp");
// Data table summary
// → Data Table("Sample(1) By (Device)")
Data Table("Sample(1)") << Summary(Group(:Device), N, Subgroup(:Violation), Freq("None"), Weight("None"));
// Select matching cells
Data Table("Sample(1) By (Device)") << Select Where(:"N(1)"n == 0);
// Invert current selection
Data Table("Sample(1) By (Device)") << Invert Row Selection;
// Toggle selected rows' exclude state
Data Table("Sample(1) By (Device)") << Select Where(:"N(1)"n == 0) << Invert Row Selection << Exclude;
// Close Data Table: Sample(1) By (Device)
Close(Data Table("Sample(1) By (Device)"), NoSave);
いくつかの小さな変更を加えれば、将来使用できるかなり堅牢なスクリプトになります (テーブル名の代わりに変数を使用し、Names Default To Here(1) で開始します...いくつかの変更について言及します)。
早速のご返信ありがとうございます。 あなたは私の一日をとても充実させてくれました!