배열을 문자열로 변환모두 안녕
다른 테이블의 배열에서 값을 가져와 내 선택 값으로 사용하려고 합니다. 배열을 문자열로 변환하는 방법이 있습니까?
name_key = associative array(column(ref_file_1, "NAME") << get values) << get keys;
merged_file << select where(:Name_final==name_key);
고급 통계 모델링대량 맞춤화Re: 배열을 문자열로 변환크레이지,
다시 한 번 JMP에 대해 새로운 사실을 알게 되었습니다.나는 원래 Contains() 함수를 사용하여 코드를 작성했지만 Loc() 함수를 사용하여 변환했습니다.
Contains( "BARBARA ANN", "BARBARA")
True를 반환합니다.
포함의 비교 구성 요소가 항목의 JMP 목록인 경우,
Contains( {"BARBARA ANN", "BETTY", "DAVID"}, "BARBARA")
True도 반환하지만 False를 반환합니다. 이는 절대 일치를 의미합니다.
좋은 정보 감사합니다
Re: 배열을 문자열로 변환다시 한 번, 질문의 핵심에 도달하는 Jim의 능력에 놀랐습니다. 여기에 있는 두 가지 멋진 코드는 더 긴 설명이 필요합니다.
이것은 무엇을 합니까?
name_key = associative array(column(ref_file_1, "NAME") << get values) << get keys;
ref_file_1 데이터 테이블 참조입니다. "이름" 문자열로 된 열의 이름(문자 그대로 "NAME"이지만 변수에 있을 수 있음)이고 열 함수는 열 참조를 반환합니다. 그만큼 <<값 가져오기 메시지는 중복을 포함하여 열에서 모든 값을 가져옵니다. 그만큼 연관 배열 함수는 고유한 값 집합을 생성하고 <<키 가져오기 메시지는 고유한 값을 반환합니다. (잘했어 @29755 .)
이?
merged_file << select where(nrows(loc(name_key,:Name_final))>0);
그만큼 <<어디서 선택 메시지는 각 행에서 작동합니다. merged_file , 한 번에 하나씩 인수가 0이 아닌 경우 행을 선택합니다.
그만큼 위치() 함수는 인덱스 행렬을 반환합니다. 에서 목록을 검색합니다. 이름_키 :Name_final의 발생에 대해. 결과 행렬은 0개 이상의 행을 가질 수 있지만 이 예에서는 키가 고유하기 때문에 0 또는 1개의 행이 있습니다. 그만큼 nrows() 함수는 0 또는 1을 반환한 다음 >0으로 비교되고 0 또는 1로 남습니다. 따라서 :Name_final이 ref_file_1:NAME 목록에 있으면 행이 선택됩니다.
대안:
name_key에 >1e6 이름이 있고 merge_file에 >1e7 행이 있는 경우 어떻게 됩니까? 공연은 어떤 모습일까요? loc 함수는 많이 검색할 것입니다. 1e13 문자열을 비교합니다. 기다리다 지치게 됩니다. 이에 대한 수정은 다음과 같이 연관 배열을 사용하는 것입니다.
nameSet = associative array(column(ref_file_1, "NAME") << get values);
merged_file << select where(contains(nameSet, :Name_final));
이제 nameSet에는 1e7 조회만 있습니다. 무료는 아니지만 1e6 항목을 순차적으로 확인하는 것보다 훨씬 빠릅니다. 나는 각각 약 20개의 비교를 추측할 것입니다(log2(1e6)). 이는 다음 관리자가 따라하기 더 쉬울 수도 있습니다.
(테스트되지 않음. 수정 환영!)
Re: 배열을 문자열로 변환나는 이것이 당신이 원하는 것을 줄 것이라고 생각합니다
name_key = associative array(column(ref_file_1, "NAME") << get values) << get keys;
merged_file << select where(nrows(loc(name_key,:Name_final))>0);