<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Eines der Dinge, mit denen ich in JMP zu kämpfen habe, ist die Tatsache, dass, wenn ich eine Viele-für-Viele-Tabellenverknüpfung mithilfe der „Join“-Funktion für übereinstimmende Spalten durchführen möchte, die übereinstimmenden Spalten in der resultierenden Tabelle immer erhalten werden /bleibt zwischen den beiden Quelltabellen getrennt.JMP scheint keine automatische oder bequeme Möglichkeit zu bieten, die gemeinsamen Übereinstimmungsspalten mit den für alle Zeilen ausgefüllten Werten abzurufen, unabhängig davon, in welcher Quelltabelle der Schlüssel vorhanden war.Es wäre in der Lage, solche gemeinsamen, vollständig ausgefüllten Übereinstimmungsspalten mit „Präsenz“-Spalten abzurufen, die angeben, ob dieser Schlüssel in jeder Quelltabelle vorhanden war.
Lassen Sie mich das anhand eines Beispiels veranschaulichen.Angenommen, ich habe zwei Tische: Kunstkurs " Und " Sportunterricht ".Der „Primärschlüssel“ in jeder Tabelle ist die Kombination aus „ Vorname " Und " Letzte Initiale ".
Kunstkurs :
| Vorname | Letzte Initiale | Lieblingsfarbe | Punktzahl |
|---|
| John | S | Rot | 4 |
| John | B | Blau | 5 |
| Alice | A | Grün | 6 |
| Alice | M | Gelb | 7 |
| Bob | S | Lila | 6 |
| Ausfall | C | Blau | 5 |
Sportunterricht :
| Vorname | Letzte Initiale | Lieblingsaktivität | Punktzahl |
|---|
| John | S | Klettergerüst | 8 |
| John | A | Kugelstoßen | 7 |
| Alice | P | Fußball | 6 |
| Bob | S | Basketball | 5 |
| Ausfall | C | Feldhockey | 5 |
| Bob | M | Crunches | 6 |
Wenn ich einen Join für übereinstimmende Spalten durchführe, dabei FirstName und LastInitial gleichsetze, ohne Vielfache zu löschen und Nichtübereinstimmungen in beide Tabellen einzubeziehen (ein „äußerer Join“), erhalte ich Folgendes, das wir „ Studenten1 " ( Bearbeiten: Bitte verzeihen Sie mir, wenn eine dieser Tabellen vom Bildschirm abgeschnitten wird. Vielleicht versuchen Sie, dies aufgrund der Darstellung dieser Webseite in ein MS Word-Dokument zu kopieren. 
Studierende1:
| Vorname von ArtClass | LastInitial von ArtClass | Lieblingsfarbe | Partitur von ArtClass | Vorname der GymClass | LastInitial von GymClass | Lieblingsaktivität | Ergebnis von GymClass |
|---|
| | | | John | A | Kugelstoßen | 7 |
| | | | Alice | P | Fußball | 6 |
| | | | Bob | M | Crunches | 6 |
| John | S | Rot | 4 | John | S | Klettergerüst | 8 |
| John | B | Blau | 5 | | | |
| Alice | A | Grün | 6 | | | |
| Alice | M | Gelb | 7 | | | |
| Bob | S | Lila | 6 | Bob | S | Basketball | 5 |
| Ausfall | C | Blau | 5 | Ausfall | C | Feldhockey | 5 |
Was ich mir viel lieber holen würde, ist die folgende Art von Tabelle, die wir „ Studenten2 ":
Studierende2:
| Vorname | Letzte Initiale | Lieblingsfarbe | Partitur von ArtClass | Präsentiert in ArtClass | Lieblingsaktivität | Ergebnis von GymClass | Anwesend im GymClass |
|---|
| Alice | A | Grün | 6 | 1 | | | 0 |
| Alice | M | Gelb | 7 | 1 | | | 0 |
| Alice | P | | | 0 | Fußball | 6 | 1 |
| Bob | M | | | 0 | Crunches | 6 | 1 |
| Bob | S | Lila | 6 | 1 | Basketball | 5 | 1 |
| John | A | | | 0 | Kugelstoßen | 7 | 1 |
| John | B | Blau | 5 | 1 | | | 0 |
| John | S | Rot | 4 | 1 | Klettergerüst | 8 | 1 |
| Ausfall | C | Blau | 5 | 1 | Feldhockey | 5 | 1 |
Beachten Sie, dass ich in der zweiten Version nur einen gemeinsamen Satz übereinstimmender Spalten habe – Vorname Und Letzte Initiale – die für alle Zeilen vollständig ausgefüllt ist.Ich habe auch Spalten, die mir sagen, ob der Schlüssel in den einzelnen Quelltabellen (ArtClass und GymClass) vorhanden war.Im Gegensatz dazu war in der ersten Version ( Studierende1) , können Sie nur feststellen, ob jeder Schlüssel in jeder Quelltabelle vorhanden war, indem Sie prüfen, ob die getrennten Schlüsselspalten (" Vorname von ArtClass „/“ LastInitial von ArtClass "," Vorname der GymClass „/“ LastInitial von GymClass ") fehlen oder sind vorhanden.
Eine Art und Weise, wie ich die zweite Version erfunden habe, Studenten2 , erfolgte durch die folgende Umgehungsprozedur:
- Teilmenge oder Zusammenfassung jede der beiden Quelltabellen ( Kunstkurs Und Sportunterricht ) durch die Übereinstimmungsspalten, „ Vorname " Und " Letzte Initiale ".
- Verketten die beiden in #1 erstellten Teilmengentabellen.
- Zusammenfassung die Tabelle, die in #2 durch die Match-Spalten erstellt wurde (" Vorname "," Letzte Initiale "), um Duplikate zu entfernen und die eindeutigen Schlüssel der verbundenen Tabelle abzurufen; entfernen Sie die Spalte „N Zeilen“.
- In Kunstkurs , vorübergehend eine konstante Spalte hinzufügen „ Präsentiert in ArtClass " auf alle Einsen gesetzt.
- In Sportunterricht , vorübergehend eine konstante Spalte hinzufügen „ Anwesend im GymClass " auf alle Einsen gesetzt.
- In Kunstkurs , vorübergehend ändern“ Punktzahl " Zu " Partitur von ArtClass " um diese Spalte von der in GymClass zu unterscheiden.
- In Sportunterricht , vorübergehend ändern " Punktzahl " Zu " Ergebnis von GymClass " um diese Spalte von der in ArtClass zu unterscheiden.
- In der in Nr. 3 erstellten Tabelle erfolgt die Aktualisierung von jeder der beiden vorübergehend geänderten Quelltabellen ( Kunstkurs Und Sportunterricht ), passend zu „ Vorname " Und " Letzte Initiale " und alle Spalten hinzufügen.(2 separate Vorgänge)
- Wählen Sie in derselben Tabelle die Spalten „ Präsentiert in ArtClass " Und " Anwesend im GymClass "; Tun Attribute standardisieren Und Neu kodieren stattdessen soll der fehlende Wert 0 sein, so dass die „Präsenz“-Werte 0 oder 1 sind. Dies ist das gewünschte Ergebnis, Studenten2 .
Beachten Sie, dass in diesem Verfahren zur Herstellung Studenten2 , musste ich die Konflikte manuell trennen Nicht-Schlüssel Spalte, " Punktzahl ", was die Verbinden Funktion hatte ursprünglich für mich automatisch beim Erstellen erledigt Studenten1 (durch Ändern jedes „ Punktzahl " Zu " Ergebnis von... "), was ich wollte.Das Problem mit der Verbinden Funktion ist, dass es das Gleiche für die tut Schlüssel Spalten, die ich nicht Ich möchte, dass dies der Fall ist – ich möchte, dass die Schlüsselspalten für die gesamte verbundene Tabelle gleich sind und dass separate Spalten das Vorhandensein in jeder Quelltabelle kennzeichnen.Mein oben beschriebenes Verfahren ist nicht auf Situationen skalierbar, in denen möglicherweise viele weitere widersprüchliche Nichtschlüsselspalten für Ihre Daten vorhanden sind.
Die einzige alternative Methode, die ich erkannt habe, ist die Verwendung von Verbinden Funktion wie zuvor, jedoch muss manuell eine Formelspalte hinzugefügt werden jede einzelne Übereinstimmungsspalte das würde das getrennte Paar dieser Übereinstimmungsspalte kombinieren (z. B. „ Vorname „wäre eine Formelspalte auf“ Vorname von ArtClass " Und " Vorname der GymClass ") und fügen Sie außerdem Formelspalten für das Vorhandensein in jeder Quelltabelle hinzu, die testen müssten, ob alle getrennten Übereinstimmungsspalten, die jeder Quelltabelle entsprechen, fehlen oder nicht (z. B. „ Präsentiert in ArtClass „wäre eine Formel dafür, ob beides“ Vorname von ArtClass " Und " LastInitial von ArtClass " fehlen).Auch dies ist ein sehr langwieriger und umständlicher Prozess.
Ich frage mich, ob es eine bessere und effizientere Lösung für das gibt, was ich versuche – nämlich zu generieren Studenten2 in meinem Beispiel?Wäre es mit einem Skript oder einem Add-In möglich?
Würde SAS darüber hinaus möglicherweise so etwas als zukünftige Funktionserweiterung für JMP in Betracht ziehen?
Ich freue mich über jede Hilfe dabei.
Ich denke, Sie haben die Verhaltensweisen und Einschränkungen ziemlich gut zusammengefasst.
Ich werde sie an unsere Entwicklungsmitarbeiter weiterleiten, um zu sehen, ob wir in einer zukünftigen Version einige Verbesserungen vornehmen können.
-Jeff
Ah, ausgezeichnet!(Danke für die schnelle Antwort.) Ich schätze, das war in gewisser Weise direkt vor meiner Nase, und ich kann mich nicht genau erinnern, ob ich dieses Kontrollkästchen schon vor langer Zeit ausprobiert und vergessen habe, was es bewirkt.Ich würde sagen, das löst den Großteil dieses Problems, denn es ist ziemlich einfach, „Match Flag“ umzukodieren (z. B. in „ArtClass“/„GymClass“/„Both“) oder es bei Bedarf in zwei separate „Presence“-Spalten aufzuteilen (wie ich es getan hatte Studenten2 ).
Ich denke jedoch, dass hier der einzige Vorbehalt besteht Es könnte eine Menge manueller Spaltenumbenennungen erforderlich sein wenn es viele analoge Nichtschlüsselspalten mit gebräuchlichen Namen wie „ Punktzahl " in meinem Beispiel.Wenn Sie die gemeinsamen Nichtschlüsselspalten nicht umbenennen, sieht es so aus, als würden diese Spalten in der resultierenden verknüpften Tabelle offenbar willkürlich den Wert aus der einen oder anderen Quelltabelle übernehmen.(Vielleicht gibt es eine interne Methode, wer „gewinnt“.)
Auf diese Weise wird das „ Verbinden „Der Nutzen gibt uns die Wahl zwischen:
(a) Alles automatisch disambiguieren, was wir wollen, aber die Schlüsselspalten trennen, die wir nicht wollen, wenn wir nicht Wählen Sie „Gleiche Spaltennamen zusammenführen“, wie beim Generieren Studenten1 in meinem Beitrag, bzw
(b) Gemeinsames Kombinieren der Übereinstimmungsspalten und Bereitstellung einer Anwesenheitsanzeigespalte, was wir wollen, aber Nicht-Schlüsselspalten mit gebräuchlichen Namen miteinander in Konflikt bringen lassen, was wir nicht wollen – wenn wir Tun Wählen Sie „Gleiche Spaltennamen zusammenführen“.
Kennen Sie eine gute Lösung für diesen Vorbehalt?
Ansonsten danke für den Hinweis!
Im Join-Dialog gibt es die Option „Spalten mit demselben Namen zusammenführen“, die genau das tut, was der Name vermuten lässt, und Ihnen einen Satz davon liefert Vorname Und Letzte Initiale Säulen.
In Ihrem Beispiel gibt es in jeder Tabelle eine Spalte mit dem Namen „Score“ und Sie müssen diese in „Score“ umbenennen Fitnessstudio-Score Und Kunstpartitur . Anschließend können Sie den Join-Dialog wie folgt abschließen:

Und Sie erhalten eine Datentabelle wie diese:

Die Spalte „Match Flag“ gibt an, welche Tabellen zu den einzelnen Zeilen beigetragen haben. 1==Haupttisch, 2==Mit Tisch, 3 == Beide.
Ich denke, das ist es, wonach Sie suchen, oder jedenfalls sehr nahe dran.
-Jeff