creare un nuovo ID per gestire una relazione da multipla a multiplaCiao, ho dati con 2 colonne, una è l'ID individuale e una è l'email. Il problema con questi dati è che la relazione tra l'ID individuale e l'email è multipla, il che significa che un ID individuale potrebbe avere più email e un'e-mail potrebbe avere più ID individuali. Quindi avrei bisogno di creare una tabella di mappatura di un nuovo ID univoco a tutti gli ID individuali / e-mail, che specifica che quegli ID individuali o e-mail se si sovrappongono sono in realtà la stessa persona. Non riuscivo davvero a pensare a un modo per farlo senza la sceneggiatura. Qualcuno potrebbe aiutare? Grazie!
AnalyticsRi: crea un nuovo ID per gestire una relazione da multipla a multiplaQuindi dove prenderesti le informazioni che ti dicono quale numero univoco è una persona unica? Basandosi solo su queste due colonne che stai descrivendo non hai altra scelta che rendere una delle colonne l'identificatore univoco e mappare l'altra su di essa. Forse pubblicare alcuni dati di esempio?
Ri: crea un nuovo ID per gestire una relazione da multipla a multiplaNon credo di capire cosa vuoi.Sembra che tu possa semplicemente concatenare le due colonne e avresti una combinazione persona / e-mail unica per ogni osservazione.Se vuoi che ogni persona o ogni email nella propria riga, usa semplicemente Tabulate.Ho allegato una tabella di esempio che mostra la mappatura multipla, con una tabulazione e una nuova colonna con un identificatore univoco.Forse puoi usare questo esempio per dirci cosa vuoi.
Ri: crea un nuovo ID per gestire una relazione da multipla a multiplaPenso che ciò di cui hai bisogno sia una tabella come:
da una tabella che assomiglia a questa:
| ID | e-mail |
| 10 | ... |
| 11 | ... |
| 12 | .. |
| 15 | .. |
| 16 | .. |
| 17 | .. |
| 18 | .. |
Ma non mi è chiaro come faresti a sapere quali ID e quali e-mail appartengono alla stessa persona, quindi era di questo che si trattava.
Ri: crea un nuovo ID per gestire una relazione da multipla a multiplaPenso che tu possa farlo tabulando (come nel mio esempio), quindi trasformandolo in una tabella di dati e quindi creando una colonna che concatena (più concatenazioni se vuoi inserire il ",").
Ri: crea un nuovo ID per gestire una relazione da multipla a multiplaCiao Paul! Ho aggiornato le informazioni nel post originale. Per favore controllalo, grazie!Ri: crea un nuovo ID per gestire una relazione da multipla a multiplaCiao Dale! Ho aggiornato le informazioni nel post originale. Per favore controllalo, grazie!Ri: crea un nuovo ID per gestire una relazione da multipla a multiplaPenso che tu abbia bisogno di qualcuno per scrivere questo.Ho provato diversi modi ma non riesco a ottenere nulla che funzioni e sono stati coinvolti così tanti passaggi che non sembra valerne la pena.Tuttavia, trovo la situazione un po 'strana: hai persone con più indirizzi email, come è comune, ma hai anche più persone che usano lo stesso indirizzo email, il che accade anche.Tuttavia, vuoi identificare persone uniche: non vedo perché dici che due persone che condividono lo stesso indirizzo email sono davvero una sola persona?Nel tuo esempio, sembra che tu voglia escludere l'ID persona n. 2 come persona unica perché condivide gli indirizzi email con altri.Ma perché questo significherebbe che non sono una persona unica?È possibile che tu stia complicando questo problema più del necessario?La mia inclinazione sarebbe quella di concentrarmi solo su ID univoci e quindi volere l'elenco degli indirizzi e-mail a essi associati, una semplice funzione di tabulazione.
Ri: crea un nuovo ID per gestire una relazione da multipla a multiplaQuesto sembra decisamente un modo un po 'strano per farlo @dale_lehman disse. Potresti scrivere questo almeno con la ricorsione. Di seguito è riportato un codice di esempio molto disordinato che sembrava funzionare almeno con i miei dati di esempio (se ho capito correttamente l'idea):
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);Ho aggiunto Select Where and Waits extra all'interno della funzione per provare a mostrare cosa sta succedendo.
Ri: crea un nuovo ID per gestire una relazione da multipla a multiplaGrazie Dale! Sì, è un punto valido, ma per questo caso aziendale abbiamo deciso di trattare le persone con la stessa email di una persona per calcolare la sequenza del loro altro comportamento.Ri: crea un nuovo ID per gestire una relazione da multipla a multiplaGrazie mille Jarmo! Questo risultato del tuo script è esattamente ciò di cui ho bisogno. Non ho familiarità con lo script, quindi solo una domanda successiva su come applicarlo alla mia tabella corrente. i nomi delle due colonne sono "Individualid" e "Email_HASHED", ho incollato lo script modificato di seguito nella mia tabella ma ha mostrato un errore. potresti eseguire il debug per me? Grazie!
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);
Ri: crea un nuovo ID per gestire una relazione da multipla a multiplaHo modificato un po 'lo script (ho cambiato la ricorsione in ciclo while poiché la ricorsione potrebbe essere un po' difficile da capire di tanto in tanto). Sono stati modificati anche i nomi delle colonne.
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];
);
);
);Hai visto di aver rimosso i riferimenti dt dalla tua versione modificata, che potrebbe causare problemi.
Ri: crea un nuovo ID per gestire una relazione da multipla a multiplaGrazie Jarmo! Come cambio il dt nella mia tabella dati corrente ma non creo la nuova tabella con i campioni che hai inserito?Ri: crea un nuovo ID per gestire una relazione da multipla a multipladt = current data table();
o
dt = Data table("Name of table here")