重複する ID をフィルタリングして除外し、最後の重複だけを残すにはどうすればよいですか?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />こんにちは、みんな、
'を使用できるJSLソリューションがあることを願っています<<場所を選択してください' メッセージをデータテーブルに送信します。 私は、各行がテストされたデバイスを表すデータのデータテーブルを持っています。
各行の一意の識別子を指定する 2 つの数値列、つまり「ID」列と「ウェーハ番号」列があります。 日付と時刻を正確に指定する別の 2 つの列もあります。 問題は、同じデータセット内でデバイスが再テストされる場合があり、ID 列とウェーハ列の値が重複することです。 すべての一意の ID を選択できるようにしたいのですが、ID が重複する場合は、最後の値 (行番号またはタイムスタンプのいずれかによる) のみが選択されるようにしたいと考えています。
以下は、私が探しているものを示すサンプルデータテーブルです。 再テストされた 2 つの部分 (ここでは赤色で強調表示され、対応する再テストは緑色) が除外され、他のすべてが選択されます。
ご協力いただければ幸いです。
ありがとう。

Re: 最後の重複だけを残して重複 ID を除外するにはどうすればよいですか?こんにちは、ネケレさん
私が「テーブルを ID、WaferNum、日付と時刻で (この順序で) ソートします」と言ったとき、それは意味しました。
Current Data Table() << Sort(By(:ID, :WaferNum, :Date, :Time), Order(Ascending));
あなたがやったように、複数のソート(それぞれの引数として単一の列)を次々に実行すると、複数の列を引数として使用して単一のソートを実行する場合と同じ結果が得られないのではないかという非常に強い疑いがあります。
お役に立てれば
Re: 最後の重複だけを残して重複 ID を除外するにはどうすればよいですか?やあみんな、
皆様のご協力に心より感謝申し上げます。
ジェフ、あなたのアプローチは私にとってはうまくいったと思いますが、データをさらに調査したところ、同じ日付と時刻の値を持つ重複があったことが判明しました(申し訳ありませんが、これは例には示されていません)。
結局、私はjvillaumieさんの提案に従いました。 以下は私の実装です。
mydt = Current Data Table();
//Sort columns by ID, wafer num, date in that order
mydt << Sort( Replace Table, By(:ID), Order(Ascending));
mydt << Sort( Replace Table, By(:WaferNum), Order(Ascending));
mydt << Sort( Replace Table, By(:Date), Order(Ascending));
//Select duplicates, i.e. if the next row has the same values for ID and waferNum as the current row, i.e. everything but the last duplicate
mydt << Select Where(
:ID == :ID[Row() + 1] & :WaferNum == :WaferNum[Row() + 1]
);
//Delete Selection
mydt <<DeleteRows;
Re: 最後の重複だけを残して重複 ID を除外するにはどうすればよいですか?JMP に関する多くのことと同様、これを実現するには複数の方法があります。
まず注意すべきことは、列の最大値()関数はオプションを取ります変数による引数。

したがって、これを使用して行を選択するための条件を構築できると思います。
(:Date ==Col Maximum(:Date,:ID,:WaferNum ))&(:Time ==
Col Maximum(:Time,:ID,:WaferNum,:Date ));
-ジェフ
Re: 最後の重複だけを残して重複 ID を除外するにはどうすればよいですか?ID、WaferNum、日付、時刻でテーブルを (この順序で) 並べ替えて、同じ ID と WaferNum を持つ行がテーブル内で互いに続き、古い行が最新の行の上になるようにします。
次に、次の数式を使用して「Duplicate」という名前の新しい列を作成します (これを直接コピーして JMP に貼り付けることができるはずです)。
If( :ID == :ID[Row() + 1, Empty()] & :WaferNum == :WaferNum[Row() + 1, Empty()],
1,
0
)
同じ ID と WaferNum を持つ別の行が後に続く行 (つまり、最新ではない複製) に「1」のフラグを付けます。
SelectWhere Duplicate == 0 を使用します。
Re: 最後の重複だけを残して重複 ID を除外するにはどうすればよいですか?これらの議論を見てください。
Re: 構文: ID によってインデックス列を作成するにはどうすればよいですか
JMP計算式:グループ別順位
ランキングを確立したら、フィルターをかけることができます。
ロン
Re: 最後の重複だけを残して重複 ID を除外するにはどうすればよいですか?ありがとうございます。 この例は確かに見ましたが、データテーブルへの << Select Where() メッセージ内で条件を指定することでこれを実現する方法があることを期待していました。 それは可能であるはずだと感じますが、どうすればよいかわかりません。
また、もう 1 つの考慮事項は、テスト バッチ内では日付とタイム スタンプが変更されないことです。つまり、指定した列に限定した場合、行番号のみが異なる重複が依然として存在することになります。 いずれにしても乾杯。
Re: 最後の重複だけを残して重複 ID を除外するにはどうすればよいですか?オプションの 1 つは、日付と時刻 (連結) 用に 1 つの列を作成することです。これにより、ID と WaferNum によるテーブルの概要を使用し、日付と時刻の最大値を要求できるようになります。これにより、新しいクリーンなテーブルが作成されます。
ロン