중복되지 않는(단일 열 ID) 행을 새 테이블을 만들지 않고 기본 테이블에 추가하시겠습니까?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />시나리오: 새 테이블을 만들지 않고 중복되지 않는 응답자 ID 레코드만 있는 기본 테이블에 일일 설문 조사 데이터 파일(이전 모든 날짜 포함)을 추가해야 합니다(기본 테이블에서 선택한 행을 잃고 싶지 않기 때문입니다. 숨겨지거나 제외됨
두 번의 시도:
연결은 기본 테이블을 유지하지만 모든 레코드를 가져옵니다.
조인은 새 레코드만 가져오지만 새 테이블을 생성하므로 행 특성(숨기기, 제외)이 손실됩니다.
Re: 중복되지 않는(단일 열 ID) 행을 새 테이블을 생성하지 않고 기본 테이블에 추가하시겠습니까?훌륭한!!!
나를 혼란스럽게 만든 것은 다음 줄이었습니다.
Parse( "Col Min( Row(), :Name(\!"" || 연결 항목( dt << 열 이름 가져오기( 문자열 ), "\!"), :Name(\!"" ) || "\ !"))" );
첫 번째 인수의 "Row()"가 무엇을 했는지 알 수 없었습니다.
매우 감사합니다.
Re: 중복되지 않는(단일 열 ID) 행을 새 테이블을 생성하지 않고 기본 테이블에 추가하시겠습니까?안녕 마틴,
당신이 올바른지.그 라인은 당신이 추론한 것과 정확히 일치합니다.다른 사람들이 더 명확하게 이해할 수 있도록 몇 가지 의견을 추가했습니다.
유용하게 사용하셨다니 기쁩니다!
Re: 중복되지 않는(단일 열 ID) 행을 새 테이블을 생성하지 않고 기본 테이블에 추가하시겠습니까?그래서 알아낸 것 같아요.라인 1은 문자열 "Col Min( Row(), :name, :age, :sex, :height, :weight )"을 생성하여 (2)에서 모든 열이 일치하는 이전 행의 행 번호를 결정하는 데 사용됩니다. .그리고 2는 중복 행의 행 번호를 "duplicates" 배열에 추가합니다.
이것은 꽤 식칼입니다.트리플리케이트가 있으면 어떻게 되는지 궁금합니다.항상 첫 번째 인스턴스를 유지하고 두 번째와 세 번째 인스턴스를 삭제합니까?나는 그것을 시도해야 할 것입니다.
고마워 로봇!
Re: 중복되지 않는(단일 열 ID) 행을 새 테이블을 생성하지 않고 기본 테이블에 추가하시겠습니까?Hello Robot, 이 두 줄이 무엇을 하는지 설명해 주시겠습니까?
고마워
1. col_min = Parse( "Col Min( Row(), :Name(\!"" || Concat Items( dt << 열 이름 가져오기( string ), "\!"), :Name(\!"" ) || "\!"))" );
2. 각 행에 대해( If( col_min != Row(), 중복 |/= Row() ) );
Re: 중복되지 않는(단일 열 ID) 행을 새 테이블을 생성하지 않고 기본 테이블에 추가하시겠습니까?안녕 cdwhite,
얼마 전에 도움이 될 스크립트를 작성했습니다.아래 스크립트는 수식 및 행 상태를 포함하여 원본 데이터 테이블을 유지하면서 중복 행을 삭제합니다.이 스크립트 다음에 연결 기능을 사용하면 문제를 해결할 수 있습니다.
여기에 기본 이름( 1 );
// 데이터 테이블과 새 데이터를 만듭니다.
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << 임의로 선택( 10 );
dt2 = dt << Subset( (선택한 행), 출력 테이블 이름( "새 데이터" ) );
dt << 선택 지우기;
dt2 << 행 추가( {:name = "PETER", :age = 14, :sex = "M", :height = 61, :weight = 124} );
// 원본 데이터에 임의로 행 상태를 설정합니다.
dt << 무작위로 선택( 10 ) << 숨기기 << 제외 << 선택 취소;
// 새로운 데이터를 추가합니다.
dt << Concatenate( dt2, 첫 번째 테이블에 추가 );
닫기( dt2, 저장하지 않음 );
// 중복 행을 삭제합니다.
dt = 현재 데이터 테이블();
col_min = Parse( "Col Min( Row(), :Name(\!"" || Concat Items( dt << get 열 이름( string ), "\!"), :Name(\!"" ) || "\!"))" ); // 다른 모든 열의 최소 행 번호를 결정하는 JSL 표현식을 만듭니다.
중복 = []; // 중복 행을 저장할 행렬을 만듭니다.
각 행에 대해( If( col_min != Row(), 중복 |/= Row() ) ); // 각 행을 위의 "col_min" 표현식과 비교합니다.현재 행이 다른 모든 열의 최소 행과 일치하지 않으면 해당 행이 "중복" 행렬에 추가됩니다.
dt << 행 삭제(중복); // 중복 삭제.
nn = N 행(중복);
새 창( "중복 행 삭제", <<모달, 텍스트 상자( "완료." ), Text Box( Concat( "삭제됨 ", Char( nn ), " 행." ) ), 버튼 상자( "확인" ) );
Re: 중복되지 않는(단일 열 ID) 행을 새 테이블을 생성하지 않고 기본 테이블에 추가하시겠습니까?업데이트 기본 테이블 옵션을 사용해 보았지만 여전히 새 테이블을 생성합니다.
데이터 테이블 ( "원래의" ) << 가입하다 (
와 함께 ( 데이터 테이블 ( "뉴데이터" ) ) ,
업데이트 ,
일치하는 열 기준 ( : 열 ID = : 열 ID ) ,
배수 삭제 ( 1 , 1 ) ,
이름 ( "일치하지 않는 항목 포함" )( 0 , 1 ) ,
기본 테이블 순서 유지 ( 1 )
);

Re: 중복되지 않는(단일 열 ID) 행을 새 테이블을 생성하지 않고 기본 테이블에 추가하시겠습니까?조인을 수행할 때 "두 번째 테이블의 데이터로 기본 테이블 업데이트" 옵션을 사용하여 새 테이블을 만들지 않아도 됩니다.
Re: 중복되지 않는(단일 열 ID) 행을 새 테이블을 생성하지 않고 기본 테이블에 추가하시겠습니까?감사합니다.원래 데이터 테이블에 행 상태 데이터 유형으로 지정된 새 열을 추가한 다음 행 상태 메뉴의 복사 기능(실제 열 머리글이 아닌 왼쪽의 열 목록 상자에서 행 상태 열 클릭)을 사용하여 복사하고 그런 다음 조인 후 행 상태를 다시 적용합니다.행 추가 조인을 위한 스크립트는 설문 조사 데이터 세트의 새 레코드만 기본 데이터 테이블로 가져오고 이전에 추가된 모든 사례는 무시합니다.
Data Table( "주요 조사 데이터 세트" ) << Join(
With( Data Table( "Secondary Survey Data Set" ) ),
같은 이름 열 병합,
두 번째 테이블 수식( 0 ) 복사,
기본 테이블 수식 평가 억제( 0 ),
일치하는 열( :ResponseID = :ResponseID )로,
배수( 0, 0 ) 삭제,
Name( "일치하지 않는 항목 포함" )(0, 1),
기본 테이블 순서 유지( 1 )
)
두 파일을 결합한 후 행 상태 메뉴를 사용하여 행 상태 열에서 행 상태를 복사/복원했습니다.완벽하게 작동했습니다.감사합니다!
Re: 중복되지 않는(단일 열 ID) 행을 새 테이블을 생성하지 않고 기본 테이블에 추가하시겠습니까?연관 배열을 사용하여 설정 작업을 수행할 수 있습니다.한 테이블을 다른 테이블에 추가하는 매끄러운 방법을 찾지 못했습니다.JSL 루프를 사용하여 데이터를 살펴봐야 했습니다.
dt_원본 = 새 테이블 ( "원래의" , 행 추가 ( 4 ) ,
새 열 ( "열 ID" , 숫자 , 마디 없는 , 체재 ( "최상의" , 12 ) ,
값 설정 ( [ 1 , 2 , 삼 , 4 ] )
) ,
새 열 ( "결과" , 성격 , 명사 같은 , 값 설정 ( { "ㅏ" , "비" , "씨" , "디" } ) )
) ;
dt_new = 새 테이블 ( "뉴데이터" , 행 추가 ( 10 ) ,
새 열 ( "열 ID" , 숫자 , 마디 없는 , 체재 ( "최상의" , 12 ) ,
값 설정 ( [ 1 , 2 , 삼 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ] )
) ,
새 열 ( "결과" , 성격 , 명사 같은 ,
값 설정 ( { "ㅏ" , "비" , "씨" , "디" , "이자형" , "에프" , "g" , "시간" , "나" , "제이" } )
)
) ;
// 이전 테이블에는 없고 새 테이블에는 어떤 행이 있는지 확인
a_원본 = 연관 배열 ( 열 ( dt_원본 , "열 ID" )) ;
다시 한번 = 연관 배열 ( 열 ( dt_new , "열 ID" )) ;
다시 한번 << 제거하다 ( a_원본 ) ;
new_rows = 다시 한번 << 열쇠를 얻다 ;
// 하나의 테이블을 다른 테이블에 추가하는 더 빠른 방법이 있어야 합니다.
니 = nrows ( dt_원본 ) ;
NR = 나이트 ( new_rows ) ;
dt_원본 << 행 추가 ( NR ) ;
~을 위한 ( 나 = 1 , 나 <= ncols ( dt_원본 ) , 나 ++,
one_col = 열 ( dt_원본 , 나 ) << 이름을 얻다 ;
~을 위한 ( 케이 = 1 , 케이 <= 나이트 ( new_rows ) , 케이 ++,
중 = new_rows [ 케이 ] ;
N = 케이 + 니 ;
열 ( dt_원본 , one_col )[ N ] = 열 ( dt_new , one_col )[ 중 ] ;
) ;
) ;
Re: 중복되지 않는(단일 열 ID) 행을 새 테이블을 만들지 않고 기본 테이블에 추가합니까?나는 테이블을 결합하고 연결하는 것이 약간의 예술이라고 생각합니다(즉, 내가 정말로 원하는 것을 얻을 때까지 시행착오).그러나 필요에 따라 테이블에 다시 적용할 수 있는 열에 현재 행 상태(즉, 숨겨진 행 상태 및 제외된 행 상태)를 모두 저장할 수 있으므로 열 유형 "행 상태"를 조회하는 것이 좋습니다.