현재 테이블에서 중복 행 제거안녕,
지금 부모 테이블에 256k 행이 있습니다. 몇 가지 분석을 수행하는 동안 중복 행이 거의 없다는 것을 알았습니다. 이 테이블은 스크립트를 통해 수정된 새 데이터를 지속적으로 가져옵니다. 그리고 소스 데이터가 다시 중복될 가능성이 있습니다.
그래서 일부 분석을 실행하기 전에 실행할 수 있는 정리 스크립트를 만들려고 합니다. 여기에서 다른 토론을 검색하고 해결책을 찾았습니다( https://community.jmp.com/t5/Discussions/Eliminating-Duplicate-Rows-keeping-first-duplicate/td-p/3424 ), 내 응용 프로그램에 맞게 사용자 정의했습니다.
dt3 = Current Data Table();
dt2 = dt3 << Summary(
group(:CL1, :CL2, :CL3, :CL4)
);
dt3 << join(
with (dt2),
update,
by matching columns (
:CL1 = :CL1,
:CL2 = :CL2,
:CL3 = :CL3,
:CL4 = :CL5
),
drop multiples(1,0),
name("include non-matches")(0,0),
preserve main table order (1),
);
이 솔루션은 내가 찾던 것을 수행했습니다. 그러나 상위 테이블을 업데이트할 수 없습니다. 올바른 행으로 새 테이블을 생성하지만 내 부모 테이블은 변경되지 않습니다. 상위 테이블에서 이 코드를 사용하여 상위 테이블(이 경우 "Currnet Data Table()")에서 행을 삭제하려면 어떻게 해야 합니까?
또한 (이미 알고 있지만 확인하고 싶었습니다) 데이터 세트에 25개의 열이 있습니다. 위의 스크립트를 실행하여 25개 열을 모두 정확하게 일치시켜야 합니까, 아니면 시간 열이 있는 한 더 적은 수의 열(위 예당 4개)을 실행할 수 있습니까? JMP 파일에 막대한 양의 데이터가 있으므로 스크립트 속도를 늦추고 싶지 않았습니다.
미리 감사드립니다!
Re: 현재 테이블에서 중복 행 제거GZMORGAN0님, 감사합니다.
귀하의 방법론을 사용하여 중복을 제거할 수 있었습니다. DIF 수식으로 새 열을 만들었습니다. 그런 다음 스크립트 정렬 시간 열을 사용하여 0(중복 행을 의미하는 diff = 0)을 선택하고 중복 항목을 삭제합니다.Re: 현재 테이블에서 중복 행 제거NiiD,
시간이 주요 식별자인 경우 한 가지 옵션은 다음에 대한 새 열을 만드는 것입니다. Dif(:날짜 시간,1) 또는 Dif(:Datetime,1) ==0 중복이어야 하는 행을 가져옵니다. 그러나 날짜 시간은 같지만 도구나 다른 식별자가 다른 레코드가 있을 수 있는 경우 해당 식별자와 날짜 시간별로 정렬한 다음 행을 가져오거나 여기서 식별자 == Lag(identifier,1) & Dif(:Datetime,1을 선택합니다. ) ==0. 그런 다음 해당 행을 삭제하십시오.
Re: 현재 테이블에서 중복 행 제거감사해요! 나는 당신의 코드를 사용하여 내가 적응할 수 있는지 확인하려고 노력할 것입니다.
나는 서로 옆에 동일한 행을 얻기 위해 정렬을 사용할 수 있는 시간 열이 있습니다. 다른 모든 열은 실제 프로세스 데이터이므로 중복 항목이 없습니다(제품 이름, 제품 유형과 같은 프로세스 식별자 제외). 그러나 시간 열을 사용하여 정렬하고 서로 옆에 동일한 행을 가질 수 있습니다. 그런 다음 문제는 동일한 행 중 하나를 선택하는 것입니다.
JMP 14에 새로운 기능이 있지만 JMP 13(내 버전)에서는 지원되지 않는다는 것을 알았습니다. 따라서 중복 행(두 항목 중 하나)을 선택하는 작은 쉬운 코드가 있는 경우 간단히 삭제할 수 있습니다.
dt3 = Data Table( "ProcessDataTable" ) << Select Duplicate Rows();
중복 배경: 제 스크립트는 매주 생성되는 CSV 파일에서 데이터를 가져와 JMP 마스터 테이블로 가져옵니다. 주간 데이터는 생성된 시점으로부터 지난 7일입니다. 따라서 일주일 동안 CSV가 월요일 오후 12시에 생성되고 다음 주 월요일 오전 8시에 생성된 경우 3시간의 복제가 있을 수 있습니다.
이것이 데이터가 JMP에 들어오면 제외하려는 것입니다. JMP에 도달하기 전에 중복을 제거할 수 있는 기능이 없으므로 JMP에서 솔루션을 기대하고 있습니다.
Re: 현재 테이블에서 중복 행 제거NiiD,
데이터에 대한 주요 정보가 누락되었습니다. 고유한 레코드를 나타내야 하는 열이 하나 이상 있습니까? 예를 들어:
- 반도체와 같은 다단계 제조 라인은 일반적으로 Lot#, Wafer#, Operation#, Equip ID 및 Datetime 열을 사용합니다.
- 반복 측정 약물 연구: 피험자 ID 및 날짜 시간
- 등.
그런 다음 이러한 열이 고유한 레코드(키)를 나타내야 하는 경우 다른 열은 중요하지 않으며 첫 번째 또는 마지막 레코드를 유지할지 여부를 결정해야 합니다.즉, 테이블 주문이 중복에 대한 정보를 제공합니까? 예를 들어 데이터베이스는 종종 가장 최근의 것부터 오래된 것 순으로 정렬됩니다.
첨부된 스크립트는 256,000개의 고유한 행과 25개의 열로 구성된 테이블을 생성합니다. 무작위로 200개의 행을 선택합니다. 두 번째 100이 두 번 복제되면 첫 번째 100이 복제되고 테이블 순서가 섞입니다. 이제 256,300개의 행이 있습니다.
2개의 문자열 열과 2개의 정수 열로 생성되었으므로 고유 키를 나타내는 4개의 열이 있습니다.그리고 이 스크립트는 테이블에서 가장 높은 순서의 행을 유지합니다. 중간 테이블은 렌더링 시간 없이 성능 테스트를 위해 보이지 않게 설정됩니다. 그러나 코드가 수행하는 작업을 이해하기 위해 코드를 표시되도록 변환할 수 있습니다.
나는 이것을 6번 실행했고 각각 내 PC에서 2.0x초가 걸렸다.시간은 속이는 횟수에 따라 달라집니다.
스크립트는 256k보다 훨씬 작아야 하는 중복된 행에서만 작업하여 삭제할 행을 찾습니다.
최종 메모. 기본 테이블에서 해당 행을 삭제하는 대신 해당 행을 제외하거나 Keep 또는 Save 열을 유지하여 행 상태를 재설정하여 제외할 수 있습니다.
행운을 빌어요!