공통적으로 일치하는 열을 조인하고 가져오는 방법<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />JMP에서 제가 겪고 있는 문제 중 하나는 일치하는 열에 대해 "Join" 함수를 사용하여 다대다 테이블 조인을 수행하려고 할 때 결과 테이블의 일치 열이 항상 다음을 얻는다는 사실입니다. /stay는 두 소스 테이블 각각 간에 분리되어 있습니다.JMP는 키가 있는 소스 테이블에 관계없이 모든 행에 대해 값이 채워진 공통 일치 열을 가져오는 자동 또는 편리한 방법을 제공하지 않는 것 같습니다.해당 키가 각 소스 테이블에 존재하는지 여부를 나타내는 "존재" 열을 사용하여 완전히 채워진 일반적인 일치 열을 얻을 수 있습니다.
예를 들어 설명하겠습니다.테이블이 두 개 있다고 가정해 보겠습니다. 미술수업 " 그리고 " 체육 수업 ".각 테이블의 "기본 키"는 " 이름 " 그리고 " 마지막 이니셜 ".
미술수업 :
| 이름 | 마지막 이니셜 | 좋아하는 색 | 점수 |
|---|
| 남자 | 에스 | 빨간색 | 4 |
| 남자 | 비 | 파란색 | 5 |
| 앨리스 | ㅏ | 녹색 | 6 |
| 앨리스 | 중 | 노란색 | 7 |
| 단발 | 에스 | 보라 | 6 |
| 출격 | 씨 | 파란색 | 5 |
체육 수업 :
| 이름 | 마지막 이니셜 | 가장 좋아하는 활동 | 점수 |
|---|
| 남자 | 에스 | 원숭이 바 | 8 |
| 남자 | ㅏ | 투포환 | 7 |
| 앨리스 | 피 | 축구 | 6 |
| 단발 | 에스 | 농구 | 5 |
| 출격 | 씨 | 필드 하키 | 5 |
| 단발 | 중 | 크런치 | 6 |
두 테이블 모두에서 배수를 삭제하고 일치하지 않는 항목을 포함하지 않고 FirstName과 LastInitial을 동일하게 하는 일치하는 열에 대한 조인을 수행하면("외부 조인") 다음을 얻게 됩니다. 학생1 " ( 편집: 이 테이블 중 화면이 잘리는 경우 양해해 주시기 바랍니다. 이 웹페이지가 표시되는 방식 때문에 이것을 MS Word 문서에 복사해 보세요. 
학생1:
| FirstName of ArtClass | ArtClass의 마지막 이니셜 | 좋아하는 색 | ArtClass 점수 | 체육관 클래스의 이름 | GymClass의 마지막 이니셜 | 가장 좋아하는 활동 | GymClass 점수 |
|---|
| | | | 남자 | ㅏ | 투포환 | 7 |
| | | | 앨리스 | 피 | 축구 | 6 |
| | | | 단발 | 중 | 크런치 | 6 |
| 남자 | 에스 | 빨간색 | 4 | 남자 | 에스 | 원숭이 바 | 8 |
| 남자 | 비 | 파란색 | 5 | | | |
| 앨리스 | ㅏ | 녹색 | 6 | | | |
| 앨리스 | 중 | 노란색 | 7 | | | |
| 단발 | 에스 | 보라 | 6 | 단발 | 에스 | 농구 | 5 |
| 출격 | 씨 | 파란색 | 5 | 출격 | 씨 | 필드 하키 | 5 |
내가 원하는 것은 다음과 같은 종류의 테이블입니다. 학생 2 ":
학생2:
| 이름 | 마지막 이니셜 | 좋아하는 색 | ArtClass 점수 | 아트클래스에 참석 | 가장 좋아하는 활동 | GymClass 점수 | GymClass에 있음 |
|---|
| 앨리스 | ㅏ | 녹색 | 6 | 1 | | | 0 |
| 앨리스 | 중 | 노란색 | 7 | 1 | | | 0 |
| 앨리스 | 피 | | | 0 | 축구 | 6 | 1 |
| 단발 | 중 | | | 0 | 크런치 | 6 | 1 |
| 단발 | 에스 | 보라 | 6 | 1 | 농구 | 5 | 1 |
| 남자 | ㅏ | | | 0 | 투포환 | 7 | 1 |
| 남자 | 비 | 파란색 | 5 | 1 | | | 0 |
| 남자 | 에스 | 빨간색 | 4 | 1 | 원숭이 바 | 8 | 1 |
| 출격 | 씨 | 파란색 | 5 | 1 | 필드 하키 | 5 | 1 |
두 번째 버전에는 일치하는 열의 공통 집합이 하나만 있습니다. 이름 그리고 마지막 이니셜 -- 모든 행에 대해 완전히 채워집니다.또한 각 소스 테이블(ArtClass 및 GymClass)에 키가 있는지 알려주는 열도 있습니다.대조적으로, 첫 번째 버전에서는( 학생1) , 각 소스 테이블에 각 키가 있는지 알 수 있는 유일한 방법은 분리된 키 열(" FirstName of ArtClass "/" ArtClass의 마지막 이니셜 ", " 체육관 클래스의 이름 "/" GymClass의 마지막 이니셜 ")이 없거나 존재합니다.
제가 두 번째 버전을 생각해낸 방식은, 학생 2 , 다음과 같은 우회 절차를 수행했습니다.
- 하위 집합 또는 요약 두 소스 테이블 각각( 미술수업 그리고 체육 수업 ) 일치 열로 " 이름 " 그리고 " 마지막 이니셜 ".
- 사슬 같이 잇다 #1에서 만든 두 개의 하위 집합 테이블.
- 요약 #2에서 일치 열(" 이름 ", " 마지막 이니셜 ") 중복을 제거하고 조인된 테이블의 고유 키를 얻으려면 "N 행" 열을 제거하세요.
- ~ 안에 미술수업 , 임시로 상수 열 추가 " 아트클래스에 참석 "를 모두로 설정합니다.
- ~ 안에 체육 수업 , 임시로 상수 열 추가 " GymClass에 있음 "를 모두로 설정합니다.
- ~ 안에 미술수업 , 일시적으로 변경 " 점수 " 에게 " ArtClass 점수 "를 사용하여 이 열을 GymClass의 열과 구분합니다.
- ~ 안에 체육 수업 , 일시적으로 변경 " 점수 " 에게 " GymClass 점수 "를 사용하여 이 열을 ArtClass의 열과 구분합니다.
- #3에서 만든 테이블에서 임시 수정된 두 개의 소스 테이블을 각각 업데이트합니다( 미술수업 그리고 체육 수업 ), "에 일치 이름 " 그리고 " 마지막 이니셜 " 그리고 모든 열을 추가합니다.(2개의 별도 작업)
- 동일한 테이블에서 " 아트클래스에 참석 " 그리고 " GymClass에 있음 "; 하다 속성 표준화 그리고 녹음 대신 누락된 값을 0으로 설정하여 "존재" 값이 0 또는 1이 되도록 합니다. 이는 원하는 결과입니다. 학생 2 .
이 만들기 절차에서는 학생 2 , 충돌하는 항목을 수동으로 분리해야 했습니다. 키가 아닌 열, " 점수 ", 이는 가입하다 기능은 원래 만들 때 자동으로 수행되었습니다. 학생1 (각각 " 점수 " 에게 " 점수... "), 그게 내가 원하던 일이었어.그러나 문제는 가입하다 기능은 동일한 작업을 수행한다는 것입니다. 열쇠 내가 쓴 칼럼 하지 마라 그렇게 하길 원합니다. 키 열이 조인된 전체 테이블에 대해 공통이기를 원하며, 각 소스 테이블의 존재 여부를 플래그로 표시하는 별도의 열을 사용하고 싶습니다.위의 절차는 데이터에 대해 키가 아닌 열이 더 많이 충돌할 수 있는 상황으로 확장 가능하지 않습니다.
내가 깨달은 유일한 대체 방법은 다음을 사용하는 것입니다. 가입하다 이전과 같이 작동하지만 수식 열을 수동으로 추가하려면 모든 단일 일치 열 해당 일치 열의 분리된 쌍을 결합합니다(예: " 이름 "는 "의 수식 열입니다. FirstName of ArtClass " 그리고 " 체육관 클래스의 이름 "), 또한 각 소스 테이블에 해당하는 분리된 일치 열이 모두 누락되었는지 여부를 테스트해야 하는 각 소스 테이블에 존재 여부에 대한 수식 열을 추가합니다(예: " 아트클래스에 참석 "는 둘 다인지 여부에 대한 공식이 될 것입니다." FirstName of ArtClass " 그리고 " ArtClass의 마지막 이니셜 " 를 찾을 수 없다).이것은 또한 매우 지루하고 우회적인 과정입니다.
내가 하려는 일, 즉 생성에 대한 더 좋고 효율적인 솔루션이 있는지 궁금합니다. 학생 2 내 예에서는?스크립트나 어떤 종류의 추가 기능을 사용합니까?
또한 SAS는 향후 JMP 기능 확장으로 이와 같은 기능을 고려할 가능성이 있습니까?
이에 대한 도움을 주셔서 감사합니다.
Re: 공통적으로 일치하는 열을 조인하고 얻는 방법행동과 한계를 꽤 잘 요약했다고 생각합니다.
향후 릴리스에서 일부 개선이 가능한지 알아보기 위해 개발 직원에게 전달하겠습니다.
-제프
Re: 공통적으로 일치하는 열을 조인하고 얻는 방법아, 훌륭해요!(빠른 응답에 감사드립니다.) 어떤 면에서는 그게 바로 제 코앞에 있었던 것 같은데, 오래 전에 그 체크박스를 시도하다가 그것이 무엇을 하는지 잊어버린 것인지 잘 기억이 나지 않습니다."Match Flag"(예: "ArtClass"/"GymClass"/"Both")를 다시 코딩하거나 원하는 경우 두 개의 별도 "존재" 열로 분할하는 것이 매우 간단하기 때문에 이 문제의 대부분이 해결되었다고 말하고 싶습니다. (내가 그랬던 것처럼 학생 2 ).
그러나 여기서 유일한 주의 사항은 다음과 같습니다. 수동으로 열 이름을 바꾸는 작업이 많이 필요할 수 있습니다. "와 같은 공통 이름을 가진 유사한 키가 아닌 열이 많은 경우 점수 " 내 예에서는.키가 아닌 공통 열의 이름을 바꾸지 않으면 결과적으로 조인된 테이블의 해당 열이 하나의 소스 테이블 또는 다른 소스 테이블에서 임의로 값을 가져오는 것처럼 보입니다.(아마도 어느 쪽이 "승리"하는지에 대한 내부 방법이 있을 것입니다.)
이로써, " 가입하다 " 유틸리티는 다음 중 하나를 선택할 수 있도록 합니다.
(a) 우리가 원하는 모든 것을 자동으로 명확화하지만 원하지 않는 키 열을 분리합니다. ~하지 않다 생성에서와 같이 "동일한 열 이름 병합"을 선택하십시오. 학생1 내 글에 있거나
(b) 일반적으로 일치 열을 결합하고 우리가 원하는 존재 표시 열을 제공하지만 공통 이름을 가진 키가 아닌 열이 서로 충돌하도록 허용하는 것은 원하지 않습니다. 하다 "동일한 열 이름 병합"을 선택하십시오.
이 경고에 대한 좋은 해결 방법을 알고 있습니까?
그렇지 않은 경우 이를 지적해 주셔서 감사합니다!
Re: 공통적으로 일치하는 열을 조인하고 얻는 방법조인 대화 상자에는 이름에서 알 수 있듯이 "동일한 이름 열 병합" 옵션이 있습니다. 이름 그리고 마지막 이니셜 열.
귀하의 예에서는 각 테이블에 Score라는 열이 있으므로 이름을 다음으로 바꿔야 합니다. 체육관 점수 그리고 미술점수 . 그런 다음 다음과 같이 조인 대화 상자를 완료할 수 있습니다.

그리고 다음과 같은 데이터 테이블을 얻습니다.

일치 플래그 열은 각 행에 기여한 테이블을 나타냅니다. 1==메인 테이블, 2==테이블 포함, 3 == 둘 다.
나는 그것이 당신이 찾고 있는 것이라고 생각합니다. 아니면 어쨌든 끔찍하게 가깝습니다.
-제프