Comment rejoindre et obtenir des colonnes correspondantes communes<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />L'une des choses avec lesquelles j'ai du mal dans JMP est le fait que, lorsque je veux effectuer une jointure de table plusieurs pour plusieurs à l'aide de la fonction "Joindre" sur les colonnes correspondantes, les colonnes correspondantes de la table résultante obtiennent toujours /reste séparé entre chacune des deux tables sources.JMP ne semble pas fournir un moyen automatique ou pratique d'obtenir la ou les colonnes de correspondance communes avec les valeurs renseignées pour toutes les lignes, quelle que soit la table source dans laquelle la clé était présente.Il serait capable d'obtenir de telles colonnes de correspondance communes entièrement remplies, avec des colonnes de "présence" pour indiquer si cette clé était présente dans chaque table source.
Permettez-moi d'illustrer avec un exemple.Supposons que j'ai deux tables, " Classe d'art plastique " et " Cours de gymnastique ".La « clé primaire » dans chaque tableau est la combinaison de « Prénom " et " Dernière initiale ".
Classe d'art plastique :
| Prénom | Dernière initiale | Couleur préférée | Score |
|---|
| John | S | Rouge | 4 |
| John | B | Bleu | 5 |
| Alice | UN | Vert | 6 |
| Alice | M | Jaune | 7 |
| Bob | S | Violet | 6 |
| Sortie | C | Bleu | 5 |
Cours de gymnastique :
| Prénom | Dernière initiale | Activité favorite | Score |
|---|
| John | S | Barres de singe | 8 |
| John | UN | Lancer du poids | 7 |
| Alice | P. | Football | 6 |
| Bob | S | Basket-ball | 5 |
| Sortie | C | Hockey sur gazon | 5 |
| Bob | M | Des craquements | 6 |
Si je fais une jointure sur les colonnes correspondantes, assimilant FirstName et LastInitial, sans supprimer de multiples et en incluant les non-correspondances dans les deux tables (une "jointure externe"), alors j'obtiens ce qui suit, que nous appellerons " Étudiants1 " ( Edit : Veuillez me pardonner si l'une de ces tables est coupée de l'écran ; essayez peut-être de copier ceci dans un document MS Word en raison de la façon dont cette page Web s'affiche. 
Étudiants1 :
| Prénom de la classe d'art | DernièreInitiale de ArtClass | Couleur préférée | Score de ArtClass | Prénom de la classe de gym | DernièreInitiale de GymClass | Activité favorite | Score de GymClass |
|---|
| | | | John | UN | Lancer du poids | 7 |
| | | | Alice | P. | Football | 6 |
| | | | Bob | M | Des craquements | 6 |
| John | S | Rouge | 4 | John | S | Barres de singe | 8 |
| John | B | Bleu | 5 | | | |
| Alice | UN | Vert | 6 | | | |
| Alice | M | Jaune | 7 | | | |
| Bob | S | Violet | 6 | Bob | S | Basket-ball | 5 |
| Sortie | C | Bleu | 5 | Sortie | C | Hockey sur gazon | 5 |
Ce que je préférerais de loin, c'est le type de tableau suivant, que nous appellerons " Étudiants2 " :
Étudiants2 :
| Prénom | Dernière initiale | Couleur préférée | Score de ArtClass | Présent dans ArtClass | Activité favorite | Score de GymClass | Présent dans GymClass |
|---|
| Alice | UN | Vert | 6 | 1 | | | 0 |
| Alice | M | Jaune | 7 | 1 | | | 0 |
| Alice | P. | | | 0 | Football | 6 | 1 |
| Bob | M | | | 0 | Des craquements | 6 | 1 |
| Bob | S | Violet | 6 | 1 | Basket-ball | 5 | 1 |
| John | UN | | | 0 | Lancer du poids | 7 | 1 |
| John | B | Bleu | 5 | 1 | | | 0 |
| John | S | Rouge | 4 | 1 | Barres de singe | 8 | 1 |
| Sortie | C | Bleu | 5 | 1 | Hockey sur gazon | 5 | 1 |
Remarquez que dans la deuxième version, je n'ai qu'un seul ensemble commun de colonnes correspondantes : Prénom et Dernière initiale -- qui est entièrement renseigné pour toutes les lignes.J'ai aussi des colonnes pour me dire si la clé était présente dans chacune des tables sources (ArtClass et GymClass).En revanche, dans la première version ( Étudiants1) , la seule façon de savoir si chaque clé était présente dans chaque table source est de voir si les colonnes de clés séparées (" Prénom de la classe d'art "/" DernièreInitiale de ArtClass ", " Prénom de la classe de gym "/" DernièreInitiale de GymClass ") sont manquants ou présents.
Une façon dont j'ai conçu la deuxième version, Étudiants2 , c'était en effectuant la procédure de détour suivante :
- Sous-ensemble ou Résumé chacune des deux tables sources ( Classe d'art plastique et Cours de gymnastique ) par les colonnes de correspondance, " Prénom " et " Dernière initiale ".
- Enchaîner les deux tableaux de sous-ensembles réalisés en #1.
- Résumé le tableau réalisé en #2 par les colonnes de correspondance (" Prénom ", " Dernière initiale ") pour supprimer les doublons et obtenir les clés uniques de la table jointe ; supprimez la colonne "N lignes".
- Dans Classe d'art plastique , ajoutez temporairement une colonne constante " Présent dans ArtClass " défini sur tous les uns.
- Dans Cours de gymnastique , ajoutez temporairement une colonne constante " Présent dans GymClass " défini sur tous les uns.
- Dans Classe d'art plastique , modifier temporairement " Score " à " Score de ArtClass " pour lever l'ambiguïté de cette chronique de celle de GymClass.
- Dans Cours de gymnastique , modifier temporairement " Score " à " Score de GymClass " pour lever l'ambiguïté de cette chronique de celle d'ArtClass.
- Dans le tableau réalisé en #3, Mise à jour à partir de chacune des deux tables sources temporairement modifiées ( Classe d'art plastique et Cours de gymnastique ), correspondant à " Prénom " et " Dernière initiale " et en ajoutant toutes les colonnes.(2 opérations distinctes)
- Dans le même tableau, sélectionnez les colonnes " Présent dans ArtClass " et " Présent dans GymClass "; faire Standardiser les attributs et Recoder la valeur manquante soit 0 à la place, de sorte que les valeurs de "présence" soient 0 ou 1. C'est le résultat souhaité, Étudiants2 .
Notez que, dans cette procédure pour faire Étudiants2 , j'ai dû séparer manuellement les éléments en conflit non-clé colonne, " Score ", lequel à Rejoindre la fonction l'avait initialement fait automatiquement pour moi lors de la création Étudiants1 (en changeant chacun " Score " à " Score de... "), c'est ce que je voulais qu'il fasse.Cependant, le problème avec le Rejoindre fonction est qu'il fait la même chose pour le clé colonnes, que je ne pas je veux que ce soit le cas - je veux que les colonnes clés soient communes à toute la table jointe, avec des colonnes séparées pour signaler la présence dans chaque table source.Ma procédure ci-dessus n'est pas adaptable aux situations dans lesquelles vous pourriez avoir beaucoup plus de colonnes non clés en conflit pour vos données.
La seule méthode alternative que j'ai réalisée consiste à utiliser le Rejoindre fonctionner comme avant, mais pour ajouter manuellement une colonne de formule pour chaque colonne de correspondance qui combinerait la paire séparée de cette colonne de correspondance (par exemple " Prénom " serait une colonne de formules sur " Prénom de la classe d'art " et " Prénom de la classe de gym "), et ajoutez également des colonnes de formules pour la présence dans chaque table source qui devraient tester si toutes les colonnes de correspondance séparées correspondant à chaque table source sont manquantes ou non (par exemple, " Présent dans ArtClass " serait une discussion pour savoir si les deux " Prénom de la classe d'art " et " DernièreInitiale de ArtClass " sont manquantes).Il s’agit également d’un processus détourné très fastidieux.
Je me demande s'il existe une solution meilleure et plus efficace pour ce que j'essaie de faire : générer Étudiants2 dans mon exemple ?Serait-ce avec un script ou un complément quelconque ?
De plus, SAS envisagerait-il potentiellement quelque chose comme ça comme future extension de fonctionnalités pour JMP ?
J'apprécierais toute aide à ce sujet.
Re : Comment rejoindre et obtenir des colonnes correspondantes communesJe pense que vous avez assez bien résumé les comportements et les limites.
Je les transmettrai à notre équipe de développement pour voir si nous pouvons apporter des améliorations dans une prochaine version.
-Jeff
Re : Comment rejoindre et obtenir des colonnes correspondantes communesAh, excellent !(Merci pour la réponse rapide.) Je suppose que c'était juste sous mon nez d'une certaine manière, et je ne me souviens pas vraiment si j'aurais pu essayer cette case à cocher il y a longtemps et oublier ce qu'elle fait.Je dirais que cela résout la majorité de ce problème, car il est assez simple de recoder "Match Flag" (par exemple en "ArtClass"/"GymClass"/"Both") ou de le diviser en deux colonnes "présence" distinctes si vous le souhaitez. (comme je l'avais fait Étudiants2 ).
Je suppose que la seule mise en garde ici est que il pourrait y avoir beaucoup de renommage manuel des colonnes requis s'il existe de nombreuses colonnes analogues non clés avec des noms communs tels que " Score " dans mon exemple.Il semble que si vous ne renommez pas la ou les colonnes communes non clés, alors apparemment, ces colonnes de la table jointe résultante semblent prendre la valeur arbitrairement d'une table source ou de l'autre.(Il existe peut-être une méthode interne permettant de déterminer lequel « gagne ».)
De cette façon, le " Rejoindre " L'utilité nous donne le choix entre :
(a) lever automatiquement l'ambiguïté de tout ce que nous voulons mais séparer les colonnes clés dont nous ne voulons pas, lorsque nous ne le faites pas sélectionnez "Fusionner les mêmes noms de colonnes", comme lors de la génération Étudiants1 dans mon message, ou
(b) en combinant généralement les colonnes de correspondance et en donnant une colonne indiquant la présence, ce que nous voulons, mais en laissant les colonnes non clés avec des noms communs entrer en conflit les unes avec les autres, ce que nous ne voulons pas - lorsque nous faire sélectionnez "Fusionner les mêmes noms de colonnes".
Connaissez-vous une bonne solution à cette mise en garde ?
Sinon merci de l'avoir signalé !
Re : Comment rejoindre et obtenir des colonnes correspondantes communesIl existe une option "Fusionner les colonnes du même nom" dans la boîte de dialogue Rejoindre qui fera ce que son nom l'indique et vous procurera un ensemble de Prénom et Dernière initiale Colonnes.
Dans votre exemple, vous avez une colonne nommée Score dans chaque tableau, vous devrez donc les renommer en Score de gymnastique et Musique artistique . Après cela, vous pouvez compléter la boîte de dialogue Rejoindre comme ceci :

Et vous obtenez un tableau de données comme celui-ci :

La colonne Match Flag indique quelles tables ont contribué à chaque ligne. 1==Table principale, 2==Avec table, 3 == Les deux.
Je pense que c'est ce que vous recherchez, ou terriblement proche en tout cas.
-Jeff