Come partecipare e ottenere colonne corrispondenti comuni<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Uno degli aspetti con cui ho difficoltà in JMP è il fatto che, quando voglio eseguire un'unione di tabelle molti-per-molti utilizzando la funzione "Unisci" sulle colonne corrispondenti, le colonne di corrispondenza nella tabella risultante ottengono sempre /rimanere segregato tra ciascuna delle due tabelle di origine.JMP non sembra fornire un modo automatico o conveniente per ottenere le colonne di corrispondenza comuni con i valori compilati per tutte le righe indipendentemente dalla tabella di origine in cui era presente la chiave.Sarebbe in grado di ottenere colonne di corrispondenza comuni completamente riempite, con colonne "presenza" per indicare se quella chiave era presente in ciascuna tabella di origine.
Lasciatemi illustrare con un esempio.Supponiamo di avere due tabelle, " Classe di arte " E " Classe di ginnastica ".La "chiave primaria" in ogni tabella è la combinazione di " Nome di battesimo " E " Ultima iniziale ".
Classe di arte :
| Nome di battesimo | Ultima iniziale | Colore preferito | Punto |
|---|
| John | S | Rosso | 4 |
| John | B | Blu | 5 |
| Alice | UN | Verde | 6 |
| Alice | M | Giallo | 7 |
| Bob | S | Viola | 6 |
| sortita | C | Blu | 5 |
Classe di ginnastica :
| Nome di battesimo | Ultima iniziale | Attività preferita | Punto |
|---|
| John | S | Barre di scimmia | 8 |
| John | UN | Lancio del peso | 7 |
| Alice | P | Calcio | 6 |
| Bob | S | Pallacanestro | 5 |
| sortita | C | Hockey su prato | 5 |
| Bob | M | Crunch | 6 |
Se eseguo un Join su colonne corrispondenti, uguagliando FirstName e LastInitial, senza eliminare multipli e includendo non corrispondenze in entrambe le tabelle (un "outer join"), ottengo quanto segue, che chiameremo " Studenti1 "( Modifica: per favore perdonami se qualcuno di questi tavoli viene tagliato fuori dallo schermo; forse prova a copiarlo in un documento MS Word a causa di come viene visualizzata questa pagina web. 
Studenti1:
| Nome di ArtClass | UltimoIniziale di ArtClass | Colore preferito | Punteggio di ArtClass | Nome di GymClass | LastIniziale di GymClass | Attività preferita | Punteggio di GymClass |
|---|
| | | | John | UN | Lancio del peso | 7 |
| | | | Alice | P | Calcio | 6 |
| | | | Bob | M | Crunch | 6 |
| John | S | Rosso | 4 | John | S | Barre di scimmia | 8 |
| John | B | Blu | 5 | | | |
| Alice | UN | Verde | 6 | | | |
| Alice | M | Giallo | 7 | | | |
| Bob | S | Viola | 6 | Bob | S | Pallacanestro | 5 |
| sortita | C | Blu | 5 | sortita | C | Hockey su prato | 5 |
Ciò che preferirei di gran lunga ottenere è il seguente tipo di tabella, che chiameremo " Studenti2 ":
Studenti2:
| Nome di battesimo | Ultima iniziale | Colore preferito | Punteggio di ArtClass | Presente in ArtClass | Attività preferita | Punteggio di GymClass | Presente in GymClass |
|---|
| Alice | UN | Verde | 6 | 1 | | | 0 |
| Alice | M | Giallo | 7 | 1 | | | 0 |
| Alice | P | | | 0 | Calcio | 6 | 1 |
| Bob | M | | | 0 | Crunch | 6 | 1 |
| Bob | S | Viola | 6 | 1 | Pallacanestro | 5 | 1 |
| John | UN | | | 0 | Lancio del peso | 7 | 1 |
| John | B | Blu | 5 | 1 | | | 0 |
| John | S | Rosso | 4 | 1 | Barre di scimmia | 8 | 1 |
| sortita | C | Blu | 5 | 1 | Hockey su prato | 5 | 1 |
Nota come nella seconda versione ho solo un insieme comune di colonne corrispondenti: Nome di battesimo E Ultima iniziale -- che è completamente popolato per tutte le righe.Ho anche delle colonne che mi dicono se la chiave era presente in ciascuna delle tabelle di origine (ArtClass e GymClass).Nella prima versione, invece, ( Studenti1) , l'unico modo per verificare se ciascuna chiave era presente in ciascuna tabella di origine è verificare se le colonne chiave separate (" Nome di ArtClass "/" UltimoIniziale di ArtClass ", " Nome di GymClass "/" LastIniziale di GymClass ") sono mancanti o presenti.
Un modo in cui ho ideato la seconda versione, Studenti2 , stava eseguendo la seguente procedura indiretta:
- Sottoinsieme O Riepilogo ciascuna delle due tabelle di origine ( Classe di arte E Classe di ginnastica ) dalle colonne di corrispondenza, " Nome di battesimo " E " Ultima iniziale ".
- Concatenare le due tabelle dei sottoinsiemi create al punto 1.
- Riepilogo la tabella composta al n.2 dalle colonne di corrispondenza (" Nome di battesimo ", " Ultima iniziale ") per rimuovere i duplicati e ottenere le chiavi univoche della tabella unita; rimuovere la colonna "N righe".
- In Classe di arte , aggiungi temporaneamente una colonna costante " Presente in ArtClass "impostato su tutti.
- In Classe di ginnastica , aggiungi temporaneamente una colonna costante " Presente in GymClass "impostato su tutti.
- In Classe di arte , cambia temporaneamente " Punto " A " Punteggio di ArtClass " per distinguere questa colonna da quella di GymClass.
- In Classe di ginnastica , cambia temporaneamente " Punto " A " Punteggio di GymClass " per distinguere questa colonna da quella in ArtClass.
- Nella tabella creata al punto 3, Aggiornamento da ciascuna delle due tabelle di origine temporaneamente modificate ( Classe di arte E Classe di ginnastica ), corrispondente a " Nome di battesimo " E " Ultima iniziale " e aggiungendo tutte le colonne.(2 operazioni separate)
- Nella stessa tabella, seleziona le colonne " Presente in ArtClass " E " Presente in GymClass "; Fare Standardizzare gli attributi E Ricodificare il valore mancante deve essere invece 0, in modo che i valori di "presenza" siano 0 o 1. Questo è il risultato desiderato, Studenti2 .
Si noti che, in questa procedura per la realizzazione Studenti2 , ho dovuto separare manualmente i file in conflitto non chiave colonna " Punto ", che il Giuntura la funzione era stata originariamente eseguita automaticamente per me durante la creazione Studenti1 (cambiando ogni " Punto " A " Punteggio di... "), che è quello che volevo che facesse.Tuttavia, il problema con il Giuntura la funzione è che fa la stessa cosa per il chiave colonne, che I non voglio che lo faccia: voglio che le colonne chiave siano comuni per l'intera tabella unita, con colonne separate per contrassegnare la presenza in ciascuna tabella di origine.La mia procedura sopra non è scalabile in situazioni in cui potresti avere molte più colonne non chiave in conflitto per i tuoi dati.
L'unico metodo alternativo che ho realizzato è utilizzare il file Giuntura funzionare come prima, ma per aggiungere manualmente una colonna formula per ogni singola colonna di corrispondenza che combinerebbe la coppia separata di quella colonna di corrispondenza (ad esempio " Nome di battesimo " sarebbe una colonna formula su " Nome di ArtClass " E " Nome di GymClass ") e aggiungere anche colonne formula per la presenza in ciascuna tabella di origine che dovrebbero verificare se tutte le colonne di corrispondenza separate corrispondenti a ciascuna tabella di origine mancano o meno (ad esempio, " Presente in ArtClass " sarebbe una forumula se entrambi " Nome di ArtClass " E " UltimoIniziale di ArtClass "mancano).Anche questo è un processo molto noioso e tortuoso.
Mi chiedo se esiste una soluzione migliore ed efficiente per ciò che sto cercando di fare, ovvero generare Studenti2 nel mio esempio?Sarebbe con uno script o un componente aggiuntivo di qualche tipo?
Inoltre, SAS considererebbe potenzialmente qualcosa di simile come una futura estensione delle funzionalità di JMP?
Apprezzo qualsiasi aiuto con questo.
Ri: Come partecipare e ottenere colonne corrispondenti comuniPenso che tu abbia riassunto abbastanza bene i comportamenti e le limitazioni.
Li trasmetterò al nostro staff di sviluppo per vedere se possiamo apportare alcuni miglioramenti in una versione futura.
-Jeff
Ri: Come partecipare e ottenere colonne corrispondenti comuniAh, eccellente!(Grazie per la risposta veloce.) Immagino che fosse proprio sotto il mio naso in un certo senso, e non riesco a ricordare bene se avrei potuto provare quella casella di controllo molto tempo fa e dimenticarmi cosa fa.Direi che risolve la maggior parte di questo problema, perché è piuttosto semplice ricodificare "Match Flag" (ad esempio in "ArtClass"/"GymClass"/"Both") o dividerlo in due colonne "presenza" separate, se lo si desidera (come avevo fatto io Studenti2 ).
Suppongo che l'unico avvertimento qui, tuttavia, sia questo potrebbero essere necessarie molte ridenominazioni manuali delle colonne se sono presenti molte colonne analoghe non chiave con nomi comuni come " Punto "nel mio esempio.Sembra che se non si rinominano le colonne non chiave comuni, apparentemente quelle colonne nella tabella unita risultante sembrano prendere il valore arbitrariamente da una tabella di origine o dall'altra.(Forse esiste un metodo interno su quale "vince".)
In questo modo, il" Giuntura "l'utilità ci offre la possibilità di scegliere tra:
(a) disambiguare automaticamente tutto ciò che vogliamo ma separare le colonne chiave che non vogliamo, quando vogliamo non seleziona "Unisci gli stessi nomi di colonna", come nella generazione Studenti1 nel mio post, o
(b) combinando comunemente le colonne di corrispondenza e fornendo una colonna che indica la presenza, cosa che vogliamo, ma lasciando che le colonne non chiave con nomi comuni entrino in conflitto tra loro, cosa che non vogliamo -- quando vogliamo Fare seleziona "Unisci gli stessi nomi di colonna".
Conoscete una buona soluzione a questo avvertimento?
Altrimenti grazie per avermelo fatto notare!
Ri: Come partecipare e ottenere colonne corrispondenti comuniC'è un'opzione "Unisci colonne con lo stesso nome" nella finestra di dialogo Unisci che farà come suggerisce il nome e ti fornirà un set di Nome di battesimo E Ultima iniziale colonne.
Nel tuo esempio, hai una colonna denominata Punteggio in ogni tabella, quindi dovrai rinominarle in Punteggio della palestra E Punteggio artistico . Dopo averlo fatto puoi completare la finestra di dialogo Unisci in questo modo:

E ottieni una tabella dati come questa:

La colonna Flag di corrispondenza indica quali tabelle hanno contribuito a ciascuna riga. 1==Tabella principale, 2==Con tabella, 3== Entrambi.
Penso che sia quello che stai cercando, o comunque terribilmente vicino.
-Jeff