条件付きの重複行の選択と削除こんにちは、みんな、
フォーラムを検索しましたが、私が達成したいと思っていたものには近づきませんでした。あるいは、達成できなかったのかもしれません。

とにかく、上のテーブルで助けが必要です。 ご覧のとおり、色で強調表示されているように重複があります。 部品は異なるセクションで検査されるため、シリアル番号はほとんどの部品で同じです (1A、1B、2A、2B、3A、3B、4A、4B を参照)。 通常、部品が検査に不合格になった場合は再検査され、それが再検査列に表示されます(0は再検査なし、1は1回目など)。 現在、同じシリアル番号内の再テストの回数または日付によってのみ部品を区別できるため、最新の再テスト結果を保持し、以前の重複を削除したいと考えています。 つまり、上の強調表示されたボックスにあるように、青または赤については、再テスト 1 を保持し、再テスト 0 を削除したいと考えています。 これは私にとってちょっと頭の痛い問題なので、シリアル番号とセクション内の条件を選択して最新の再テストを特定し、最新の再テストを保持して以前の重複を削除するには、スクリプトに関するコミュニティのアドバイスが必要です。 皆様からのご意見があれば幸いです。 ありがとう
Re: 条件付き重複行の選択と削除1つ(またはいくつか)を除くすべての列に一致する重複行を削除したい場合、これが私の実用的な解決策です。
利点は、すべての列名を指定する必要がないことです。
// delete duplicate rows, where only column ID is different
column_list = dtProcess << Get Column Names( string );
Remove From( column_list, As List( Loc( column_list, "ID" ) ) ); // remove "ID"
dtProcess << Select Duplicate Rows( Match(As List(column_list)));
doublerows = dtProcess << get selected rows;
num_selected = n rows(doublerows);
if(num_selected >0,
dtProcess << delete rows;
print("Removed " || char(num_selected) || " rows from process table.")
,
print("No duplicate rows in process table, excluding column ID.")
);:
Re: 条件付き重複行の選択と削除とても助かりました! ありがとう!
このようなものを構築していましたが、どういうわけか列の選択で組み合わせが間違っていました。
ありがとう!
Re: 条件付き重複行の選択と削除テーブルに合わせて少し修正しました。 ありがとう!
Re: 条件付き重複行の選択と削除以前のバージョンの JMP をお持ちの場合は、 <<重複する行を選択利用できない場合があります。 次に、以下のアプローチを試してください。 コードは、最も古い日付を持つ重複行 (SerialNo とセクションの一致に基づいて) を選択して削除する必要があります。 並べ替えは関係ありません。
dt = Current Data Table();
dt << select where(Col Max(:Date, :SerialNo, :Section) > :Date());
dt << delete rows();
Re: 条件付き重複行の選択と削除という機能があります
重複行を選択()
これはこれに使用できますが、一意の行に続く行の検索に基づいています。したがって、関数を使用する前にテーブルを逆順に並べ替える必要があります。以下はこれを行うためのサンプル スクリプトです。これを実行するためのサンプル データ テーブルがなかったため、スクリプトはテストされていませんが、必要なものに非常に近いです。
この関数に関するドキュメントは、Scripting Index にあります。
Names Default To Here( 1 );
dt = Current Data Table();
// Add a new column to preserve the current order
dt << New Column( "rowNum", formula( Row() ) );
// Remove the formula to convert values to static values
:rowNum << delete property( "formula" );
// Sort the data table in referse order, since one wants to
// keep the most recent value
dt << sort( by( rowNum ), order( descending ), Replace Table( 1 ) );
// Find the duplicate rows
dt << Select Duplicate Rows( Match( :SerialNo, :Date, :Retest ) );
// Delete Duplicates
dt << delete rows;
// Reorder the table
dt << sort( by( rowNum ), order( ascending ), Replace Table( 1 ) );
// Delete rowNum column
dt << delete columns( "rowNum" );