<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />안녕,
JMP10을 사용하고 있습니다.데이터 테이블에서 중복된 데이터 행을 삭제하는 스크립트를 작성하려고 합니다.내 시도의 예는 다음과 같습니다.
// 시작.
// 데이터 테이블을 생성합니다.
dt = open("$SAMPLE_DATA/Big Class.jmp");
dt << 무작위로 선택(5);
subdt = dt << Subset(출력 테이블 이름("하위 집합"), Invisible);
dt << Concatenate(subdt, 첫 번째 테이블에 추가);
닫기(subdt, 저장 안함);
dt << 선택 지우기;
// bigClass의 중복 행을 찾아 삭제합니다.
icol = dt << New Column( "색인", 숫자, 연속, 공식( 시퀀스( 1, N 행( dt ), 1, 1 ) ) );
repcol = dt << New Column( "데이터 반복",
숫자,
마디 없는,
공식( If( :Index == Col 최소값( :Index, :name, :age, :sex, :height, :weight ), 1, 0 ) )
);
dt << 선택 Where( As Column(repcol) == 0 );
dt << 행 삭제();
dt << 열 삭제( {icol, repcol} );
// 일반 데이터 테이블의 중복 행을 찾아서 삭제합니다.
colnames = dt << 열 이름 가져오기();
icol = dt << New Column( "색인", 숫자, 연속, 공식( 시퀀스( 1, N 행( dt ), 1, 1 ) ) );
repcol = dt << New Column( "데이터 반복",
숫자,
마디 없는,
Formula( If( :Index == Col 최소값( :Index, /* 여기에 열 이름을 입력하세요. */ ), 1, 0 ) )
);
dt << 선택 Where( As Column(repcol) == 0 );
dt << 행 삭제();
dt << 열 삭제( {icol, repcol} );
// 끝.
내 문제는 이 스크립트를 일반 데이터 테이블에서 실행하고 싶다는 것입니다.내 수식에 내 열 이름 목록을 어떻게 삽입할 수 있나요?이를 수행하는 더 영리한 방법이 있습니까?
감사해요!
중복 항목을 찾으려면 인덱스 열과 함께 Col Min()을 사용하는 것이 좋습니다.
나는 보통 중복된 데이터 테이블이 없는 데이터 테이블을 얻기 위해 테이블->요약을 사용합니다. 중복을 정의하는 모든 열을 기준으로 그룹화하면 됩니다. 여기에는 원본 테이블에 중복 행이 몇 개 있었는지 알려주는 열(N 행)을 제공하는 추가 이점이 있습니다.

-제프
나는 너무 빨랐다. :Name("eg ΔX") 구문이 필요한 복잡한 열 이름의 경우 첫 번째 게시된 버전이 실패합니다. 위의 코드를 편집했는데 이제 좀 더 일반적으로 작동할 것입니다.
고마워요 MS!매우 영리한.나는 그것이 어떻게 작동하는지 정확히 연구해야 할 것입니다.
Col Min()을 사용하여 중복 항목을 찾는 훌륭한 아이디어입니다!
다음은 귀하의 아이디어를 바탕으로 효과가 있는 것으로 보이는 대체 접근 방식입니다. 임시 수식 열이 필요하지 않기 때문에 더 간단합니다.
// 예제 데이터 테이블을 생성합니다.
열려 있는 ( "$SAMPLE_DATA/빅 클래스.jmp" ) << 사슬 같이 잇다 ( 열려 있는 ( "$SAMPLE_DATA/빅 클래스.jmp" ) , 첫 번째 테이블에 추가 ) ;
// 일반 테이블에서 중복된 항목을 삭제합니다.
dt = 현재 데이터 테이블 () ;
col_min = 구문 분석 ( "열민( 행(), :이름(\!"" || 항목 연결 ( dt << 열 이름 가져오기 ( 끈 ) , "\!"), :이름(\!"" ) || "\!"))" ) ;
중복 = [] ;
각 행에 대해 ( 만약에 ( col_min != 열 () , 중복 |/= 열 () ) ) ;
dt << 행 삭제 ( 중복 ) ;