조건이 있는 중복 행 선택 및 제거안녕하세요 여러분,
포럼을 검색했지만 내가 달성하고 싶은 결과가 나오지 않았거나 놓쳤을 수도 있습니다.

어쨌든 위의 표에 대한 도움이 필요합니다. 보시다시피 색상별로 강조 표시된 복제본이 있습니다. 부품이 다른 섹션(1A,1B,2A,2B,3A,3B,4A,4B 표시)에서 검사되기 때문에 일련번호는 대부분 동일합니다. 일반적으로 부품이 검사에 실패하면 재검사되며 재테스트 열에 표시됩니다(0은 재테스트 없음, 1은 첫 번째 등). 이제는 동일한 일련번호 내에서 재테스트 횟수나 날짜로만 부품을 구별할 수 있으므로 최신 재테스트 결과를 유지하고 이전 결과의 중복을 삭제하고 싶습니다. 위의 강조 표시된 상자에 따라 파란색 또는 빨간색에 대해 재테스트 1을 유지하고 재테스트 0을 제거하고 싶다는 의미입니다. 이것은 나에게 다소 골치 아픈 일이므로 일련 번호 및 섹션 내에서 조건을 선택하여 최신 재테스트를 파악한 다음 최신 재테스트를 유지하고 이전 중복을 제거하려면 스크립트에 대한 커뮤니티의 조언이 필요합니다. 이에 대해 여러분 모두의 의견이 있기를 바랍니다. 감사합니다
Re: 조건이 있는 중복 행 선택 및 제거하나(또는 몇 개)를 제외한 모든 열과 일치하는 중복 행을 제거하려는 경우 이것이 내 작업 솔루션입니다.
장점은 모든 열 이름을 지정할 필요가 없습니다.
// 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: 조건이 있는 중복 행 선택 및 제거이라는 기능이 있습니다.
중복 행 선택()
이를 위해 사용될 수 있지만 이는 고유한 행 다음에 오는 행을 찾는 것을 기반으로 합니다.따라서 이 기능을 사용하기 전에 테이블을 역순으로 정렬해야 합니다.다음은 이를 수행하기 위한 샘플 스크립트입니다.이 스크립트를 실행할 샘플 데이터 테이블이 없었기 때문에 스크립트는 테스트되지 않았지만 필요한 스크립트에 매우 가깝습니다.
함수에 대한 문서는 스크립팅 인덱스에서 찾을 수 있습니다.
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" );