다중 대 다중 관계를 처리하기 위해 새 ID 생성안녕하세요, 저는 2 개의 열이있는 데이터가 있습니다. 하나는 개별 ID이고 하나는 이메일입니다. 이 데이터의 문제점은 개별 ID와 이메일 간의 관계가 다중에서 다중이라는 것입니다. 즉, 하나의 개별 ID에 여러 개의 이메일이있을 수 있고 하나의 이메일에는 여러 개의 개별 ID가있을 수 있습니다. 따라서 모든 개별 ID / 이메일에 대한 새로운 고유 ID의 매핑 테이블을 만들어야하는데, 중복되는 개별 ID 또는 이메일이 실제로 동일한 사람인 경우이를 지정합니다. 스크립트 없이는 할 수있는 방법을 정말로 생각할 수 없었습니다. 누구든지 도울 수 있습니까? 감사합니다!
해석학Re : 다중 대 다중 관계를 처리하기 위해 새 ID 생성그렇다면 고유 한 사람이 어떤 고유 번호인지 알려주는 정보는 어디에서 얻을 수 있습니까? 설명하는이 두 열만을 기반으로 열 중 하나를 고유 식별자로 만들고 다른 열을 여기에 매핑하는 것 외에는 선택의 여지가 없습니다. 예제 데이터를 게시 할 수 있습니까?
Re : 다중 대 다중 관계를 처리하기 위해 새 ID 생성나는 당신이 원하는 것을 이해하지 못한다고 생각합니다.두 열을 연결하고 각 관찰에 대해 고유 한 사람 / 이메일 조합을 가질 수있는 것처럼 들립니다.각 개인 또는 각 이메일을 자체 행에 넣으려면 Tabulate를 사용하십시오.고유 식별자가있는 새 열뿐만 아니라 Tabulation이있는 다중 다중 매핑을 보여주는 샘플 테이블을 첨부했습니다.이 예제를 사용하여 원하는 것을 말할 수 있습니다.
Re : 다중 대 다중 관계를 처리하기 위해 새 ID 생성필요한 것은 다음과 같은 테이블이라고 생각합니다.
다음과 같은 테이블에서 :
| 신분증 | 이메일 |
| 10 | ... |
| 11 | ... |
| 12 | .. |
| 15 | .. |
| 16 | .. |
| 17 | .. |
| 18 | .. |
그러나 어떤 ID와 어떤 이메일이 같은 사람에게 속하는지 어떻게 알 수 있는지는 분명하지 않으므로 내 질문에 관한 것입니다.
Re : 다중 대 다중 관계를 처리하기 위해 새 ID 생성내 예에서와 같이 표로 만든 다음 데이터 테이블을 만든 다음 열 연결 ( ","을 삽입하려면 여러 연결)을 만들면됩니다.
Re : 다중 대 다중 관계를 처리하기 위해 새 ID 생성안녕 폴! 원본 게시물의 정보를 업데이트했습니다. 확인해주세요, 감사합니다!Re : 다중 대 다중 관계를 처리하기 위해 새 ID 생성안녕 데일! 원본 게시물의 정보를 업데이트했습니다. 확인해주세요, 감사합니다!Re : 다중 대 다중 관계를 처리하기 위해 새 ID 생성이 스크립트를 작성하려면 누군가가 필요하다고 생각합니다.나는 여러 가지 방법을 시도했지만 효과가있는 것을 얻을 수없는 것 같습니다. 그리고 너무 많은 단계가 관련되어 가치가 없어 보입니다.하지만 상황이 좀 이상하다고 생각합니다. 일반적으로 여러 이메일 주소를 가진 사람이 있지만 같은 이메일 주소를 사용하는 사람도 여러 명 있습니다.그러나 고유 한 사람을 식별하고 싶습니다. 동일한 이메일 주소를 공유하는 두 사람이 실제로 한 사람이라고 말하는 이유를 모르겠습니까?귀하의 예에서는 다른 사람과 이메일 주소를 공유하기 때문에 개인 ID # 2를 고유 한 사람으로 제외하려는 것으로 보입니다.그러나 그것이 그들이 독특한 사람이 아니라는 것을 의미하는 이유는 무엇입니까?필요 이상으로이 문제를 복잡하게 만들 수 있습니까?내 성향은 고유 한 ID에 초점을 맞춘 다음 간단한 표 기능인 이와 관련된 이메일 주소 목록을 원하는 것입니다.
Re : 다중 대 다중 관계를 처리하기 위해 새 ID 생성이것은 확실히 이것으로 약간 이상한 방법으로 보입니다. 헉헉 말했다. 적어도 재귀로 스크립트를 작성할 수 있습니다. 아래는 적어도 내 예제 데이터로 작동하는 것처럼 보이는 매우 지저분한 예제 코드입니다 (아이디어를 올바르게 이해했다면).
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(20),
Compress File When Saved(1),
New Column("id",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([1, 1, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 6, 7, 8, 9])
),
New Column("email",
Character,
"Nominal",
Set Values(
{"a", "b", "a", "c", "d", "e", "f", "g", "a", "h", "i", "j", "k", "l",
"m", "n", "o", "p", "q", "b"}
)
)
);
dt << Size Window(500,900);
dt << New Column("newid", numeric, ordinal);
createIndex = function({tempRows, index},
wait(0.5); //for visualization
idList = dt:id[tempRows,0];
emailList = dt:email[tempRows,0];
tempRowsNew = dt << Get Rows Where(Contains(idList, :id) | Contains(emailList, :email));
dt << Select Where(Contains(idList, :id) | Contains(emailList, :email)); //for visualization
wait(0.5); //for visualization
If(N Items(tempRows) != N Items(tempRowsNew),
ids = dt:id[tempRowsNew,0];
emails = dt:email[tempRowsNew,0];
Recurse(tempRowsNew, index),
If(All(tempRows == tempRowsNew),
dt:newId[tempRowsNew] = index;
newRow = Contains(dt:newId << get as matrix, .);
If(newRow == 0,
dt << Clear Select;
return("done"),
ids = dt:id[newRow,0];
emails = dt:email[newRow,0];
Recurse(matrix(newRow), index + 1);
);
)
);
);
wait(1);
createIndex([1], 1);무슨 일이 일어나고 있는지 보여주기 위해 기능 내부에 Select Where 및 Waits를 추가했습니다.
Re : 다중 대 다중 관계를 처리하기 위해 새 ID 생성데일 감사합니다! 예, 이것은 유효한 점이지만이 비즈니스 사례에서는 다른 행동의 순서를 계산하기 위해 동일한 이메일을 사용하는 사람들을 한 사람과 취급하기로 결정했습니다.Re : 다중 대 다중 관계를 처리하기 위해 새 ID 생성Jarmo 정말 감사합니다! 당신의 스크립트에서 나온이 결과는 정확히 내가 필요한 것입니다. 나는 스크립트에 익숙하지 않으므로 현재 테이블에 적용하는 방법에 대한 다음 질문 중 하나입니다. 두 열 이름은 "Individualid"와 "Email_HASHED"입니다. 아래 편집 된 스크립트를 테이블에 붙여 넣었지만 오류가 발생했습니다. 저를 위해 디버그 해 주 시겠어요? 감사합니다!
New Column("newid", numeric, ordinal);
createIndex = function({tempRows, index},
wait(0.5); //for visualization
idList = Individualid[tempRows,0];
emailList = Email_HASHED[tempRows,0];
tempRowsNew = Get Rows Where(Contains(idList, :Individualid) | Contains(emailList, :Email_HASHED));
Select Where(Contains(idList, :Individualid) | Contains(emailList, :Email_HASHED)); //for visualization
wait(0.5); //for visualization
If(N Items(tempRows) != N Items(tempRowsNew),
ids = Individualid[tempRowsNew,0];
emails = Email_HASHED[tempRowsNew,0];
Recurse(tempRowsNew, index),
If(All(tempRows == tempRowsNew),
newId[tempRowsNew] = index;
newRow = Contains(newId << get as matrix, .);
If(newRow == 0,
Clear Select;
return("done"),
ids = Individualid[newRow,0];
emails = Email_HASHED[newRow,0];
Recurse(matrix(newRow), index + 1);
);
)
);
);
wait(1);
createIndex([1], 1);
Re : 다중 대 다중 관계를 처리하기 위해 새 ID 생성스크립트를 약간 수정했습니다 (재귀가 때때로 이해하기 조금 어려울 수 있으므로 재귀를 while 루프로 변경했습니다). 열 이름도 변경되었습니다.
Names Default To Here(1);
//https://community.jmp.com/t5/Discussions/create-new-id-to-deal-with-multiple-to-multiple-relationship/m-p/365298#M61470
dt = New Table("Untitled",
Add Rows(20),
Compress File When Saved(1),
New Column("Individualid",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([1, 1, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 6, 7, 8, 9])
),
New Column("Email_HASHED",
Character,
"Nominal",
Set Values(
{"a", "b", "a", "c", "d", "e", "f", "g", "a", "h", "i", "j", "k", "l",
"m", "n", "o", "p", "q", "b"}
)
)
);
dt << Size Window(500,900);
dt << New Column("newid", numeric, ordinal);
//setup first values before While loop
rowList = [1];
idList = dt:Individualid[rowList,0];
emailList = dt:Email_HASHED[rowList,0];
index = 1;
//looping
While(1,
oldRowList = rowList;
rowList = dt << Get Rows Where(Contains(idList, :Individualid) | Contains(emailList, :Email_HASHED));
dt << Select Where(Contains(idList, :Individualid) | Contains(emailList, :Email_HASHED)); //for visualization
wait(1); //for visualization
If(N Items(oldRowList) != N Items(rowList),
idList = dt:Individualid[rowList,0];
emailList = dt:Email_HASHED[rowList,0],
If(All(oldRowList == rowList),
dt:newid[rowList] = index;
newRow = Contains(dt:newid << get as matrix, .);
If(newRow == 0,
break(),
);
index += 1;
rowList = Matrix(newRow);
idList = dt:Individualid[rowList,0];
emailList = dt:Email_HASHED[rowList,0];
);
);
);수정 된 버전에서 dt 참조를 제거하여 문제를 일으킬 수 있음을 확인했습니다.
Re : 다중 대 다중 관계를 처리하기 위해 새 ID 생성Jarmo 감사합니다! dt를 현재 데이터 테이블로 변경하지만 입력 한 샘플로 새 테이블을 만들지 않는 방법은 무엇입니까?Re : 다중 대 다중 관계를 처리하기 위해 새 ID 생성dt = current data table();
또는
dt = Data table("Name of table here")