JSL-Setup mit „Join“ zusammenführen<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ich habe herausgefunden, dass ich zwei Datensätze am besten zusammenführen kann, indem ich den Befehl „Datentabellen verbinden“ verwende. Dadurch werden möglicherweise vorhandene doppelte Einträge am besten eliminiert – Spalte 1 enthält eine eindeutige Nummer für jeden Eintrag.Ich habe ein Skript, das mehrere Datentabellen öffnet und die Daten manipuliert, aber ich habe Probleme, jede Datentabelle einzeln aufzurufen, damit das „Join“-Skript ordnungsgemäß funktioniert:
Wenn ich das manuell mache, sieht der Code so aus:
Datentabelle ( „Ohne Titel 322“ ) << Verbinden ( Datentabelle ( „Ohne Titel 318“ ) ) ,
Spalten mit demselben Namen zusammenführen ,
Durch übereinstimmende Spalten( : REPLICATE_ID = : REPLICATE_ID ) ,
Vielfaches löschen( 1 , 1 ) ,
Name( „Nichtübereinstimmungen einbeziehen“ )( 1 , 1 ) ,
Reihenfolge der Haupttabelle beibehalten( 1 ) ,
Ausgabetabelle( „Zusammengeführt“ )
Mein Problem tritt auf, wenn ich versuche, dieses Formular aus mehreren Tabellen zu codieren.Die unbenannten Tabellen (ohne Titel 322, ohne Titel 318 usw. – es können mehr sein, je nachdem, wie viele Dateien ich öffne) sind in meinem Code als gekennzeichnet. Also möchte ich irgendwie mein Maximum erreichenund verbinde dich mit jedem anderen w.
Ich habe etwas wie folgt eingerichtet:
Für (f = Datentabelle, f >= 1, f--,
Try(v = w << Join( With(Datentabelle (f)),
*und der Rest folgt den oben aufgeführten Join-Tabelleneigenschaften*
Allerdings funktioniert mein Code nicht.Hat jemand eine Idee, wie ich das machen kann?
Betreff: JSL-Setup mit „Join“ zusammenführenEs tut mir leid, ich glaube, ich habe mich nicht klar ausgedrückt:
Ich verstehe, dass ich die Tabellen, die zur Liste hinzugefügt wurden, offen halten muss. Wenn ich „Alle schließen“ (Datentabellen, nosave) in meinem Code auskommentiere, erhalte ich Folgendes
Folgendes in meinem Protokoll (ich habe einen Verweis auf eine Originaltabelle, die nicht in der openDT-Liste enthalten sein sollte und die in die OTs übertragen wird.Ich bin mir sicher, dass ich nur einen nahen FXN für diese Tabelle brauche und das könnte ich herausfinden.Ich habe zuvor angegeben, dass die Zusammenführung funktioniert, aber nicht so, wie ich es möchte.

Aber in meinem Code, wo ich //invisible habe (für w = z << Split...), Ich möchte das Unsichtbare auskommentieren, aber da das unsichtbare FXN nur die letzte Tabelle der Schleife erkennt und alle anderen gelöscht werden, brauche ich eine Möglichkeit, diese zu referenzieren und in einer Liste aufzubewahren, damit ich als Ganzes auf sie verweisen kann. (Alles schließen ist ebenfalls auskommentiert) Wie mache ich das?

Unsichtbarkeit ist das Problem. Wenn ich nicht herausfinde, wie ich auf jede unsichtbare Tabelle verweisen kann, kann ich mehrere Tabellen nicht zusammenführen. Es sieht so aus, als müsste ich den Join-Code in die Schleife verschieben, aber ich weiß nicht, wie ich das integrieren soll, wenn er jeweils nur eine Tabelle durchläuft und ich auf mindestens zwei verweisen muss.
Betreff: JSL-Setup mit „Join“ zusammenführenUnsichtbarkeit ist hier nicht das Problem. Unsichtbare Tabellen können auf andere unsichtbare oder sichtbare Tabellen verwiesen und mit diesen verknüpft werden. Geschlossene und unsichtbare Tabellen sind nicht dasselbe. Geschlossene Tische sind völlig nutzlos, sie sind verschwunden und vergessen. In dem von Ihnen platzierten Skript Alle schließen ( Datentabellen , nosave ) ; vor dem zusammenführenden Codeteil. Das sollte dazu führen, dass alle Tabellen vergessen werden und die Zusammenführung fehlschlägt. Warten Sie, bis Sie fertig sind, bevor Sie Tische schließen, ob unsichtbar oder nicht.
Oder verwenden Sie meinen oben beschriebenen Ansatz, dh öffnen Sie eine Tabelle nach der anderen, nehmen Sie die gewünschten Bearbeitungen und Aufteilungen vor und führen Sie sie dann mit dem aktuellen MT zusammen, bevor Sie sie schließen und mit der nächsten Datei fortfahren.
Betreff: JSL-Setup mit „Join“ zusammenführenHmmm, ich kann die ursprünglichen TXT-Dateien allerdings nicht zusammenführen – ich füge die unsichtbaren Zwischendateien zusammen, die aus der Aufteilung/Formatierung der ursprünglichen TXT-Dateien entstanden sind.Da diese Dateien unsichtbar und intermediär sind, gibt es kein Stammverzeichnis, in dem sie gespeichert werden (der Grund, warum ich die unsichtbare Funktion verwende, ist, dass sie Platz und Zeit spart). Ich verstehe jedoch, was Sie sagen, obwohl meine Tabellen in der Liste enthalten sind, sind sie geschlossen, sodass es keine Möglichkeit gibt, auf sie zu verweisen. Das „Öffnen“ funktioniert jedoch nicht, da es sich um Zwischendateien/unsichtbare Dateien handelt, die aus der TXT-Datei erstellt wurden Nicht gespeichert ist ein beliebiges Verzeichnis.
Hier ist die Aufschlüsselung dessen, was ich tue:
1. Ich öffne die TXT-Dateien. Der Code ähnelt dem, den Sie haben (wird den Namen Datentabelle („Ergebnis1“) haben)
2. Ich formatiere diese TXT-Dateien neu (sie sind nicht im Spaltenformat, daher habe ich Code, in dem ich sie „aufteile“, formatiere usw., um sie in eine besser lesbare Datentabelle in JMP zu bringen. - Ich werde diese INTERMEDIATE-Tabellen nennen (wird den Namen Datentabelle („Untitled1“) haben)
3. Diese Zwischendateien sind unsichtbar (es sind einfach zu viele, um sie sichtbar zu machen) – ich speichere sie nicht, da ich kein Verzeichnis mit gespeicherten Zwischendateien haben möchte, die ich später löschen muss.
4. Mein Problem ist, dass ich versuche, die Zwischentabellen zusammenzuführen
Ich sehe, dass es einfacher wäre, einfach die Originaldateien zusammenzuführen, aber sie liegen nicht in einem Format vor, in dem ich das tun könnte, daher mein Rätsel.
Der Code, den ich habe (und auf den ich zuvor verwiesen habe), funktioniert also, wenn meine Zwischentabellen nicht unsichtbar sind UND ich die Zwischentabellen, auf die ich verweise, um sie zu verknüpfen, nicht schließe (funktioniert auch nicht genau so, wie ich es möchte, aber es funktioniert trotzdem) - aber dann habe ich ALLE Tabellen geöffnet – die zusammengeführten und die nicht zusammengeführten
Die wirklichen Fragen, die ich habe, sind also:
a) Ich habe Zwischentabellen – im Wesentlichen möchte ich, dass sie unsichtbar sind, aber um sie in den MT/OTs-Listen zu referenzieren, muss ich sie sichtbar machen, damit dies funktioniert – im Wesentlichen möchte ich diese jedoch unsichtbar machen.Meine eigentliche Frage ist also: Wie referenziere ich unsichtbare Zwischentabellen in einer Schleife, um jede Tabelle zu erkennen, die für weitere Berechnungen verwendet werden soll (um die Join-Tabellen-FXN zu verwenden, muss ich sie anscheinend außerhalb der For-Schleife haben, damit ich zwei Instanzen der Zwischentabelle verbinden kann). Tabellen)?
Ich habe das Skript angehängt.Vielleicht erklärt das, was ich versuche.
Betreff: JSL-Setup mit „Join“ zusammenführenEs sieht so aus, als ob alle Tabellen vor dem Join() geschlossen wurden. Die Liste OTs ist lediglich eine Liste datierbarer Referenzen. Sie sind keine „skriptfähigen Objekte“, wenn die entsprechenden Tabellen nicht mehr vorhanden sind.
Versuchen Sie etwas wie Folgendes:
mein Weg = „/Benutzer/.../Dateien/“ ; //Pfad zum Verzeichnis der.txt-Dateien
flist = Dateien im Verzeichnis ( mein Weg ) ; //Liste aller Dateien
N = N Artikel ( flist ) ;
// Nicht-Textdateien aus flist entfernen
Für ( ich = N , ich > 0 , ich --,
Wenn ( Enthält ( flist [ ich ] , ".txt" ) == 0 ,
Entfernen von ( flist , ich ) ;
N --;
)
) ;
// Funktion zum Öffnen von Textdateien (ggf. Spalte bearbeiten und Einstellungen importieren)
Datei öffnen = Funktion ( { X } ,
Offen (
mein Weg || flist [ X ] ,
Importeinstellungen (
Ende der Linie ( CRLF , CR , LF ) ,
Ende des Feldes ( Tab ) ,
Strip-Zitate ( 1 ) ,
Verwenden Sie Apostroph als Anführungszeichen ( 0 ) ,
Ganze Datei scannen ( 1 ) ,
Etiketten ( 1 ) ,
Spaltennamen beginnen ( 1 ) ,
Datenstarts ( 2 ) ,
Zeilen zum Lesen ( Alle ) ,
Jahresregel ( „10-90“ )
)
)
) ;
// Erste Datei öffnen
MT = Datei öffnen ( 1 ) ;
//Alle Dateien in Flist zusammenführen
Für ( ich = 2 , ich <= N , ich ++,
ST = Datei öffnen ( ich ) ;
FT = MT ;
MT = FT << Verbinden (
Mit ( ST ) ,
Aktualisieren ,
Durch passende Spalten ( : Spalte_1 = : Spalte_1 ) ,
Multiples löschen ( 1 , 0 ) ,
Name ( „Nichtübereinstimmungen einbeziehen“ )( 1 , 1 ) ,
Behalten Sie die Reihenfolge der Haupttabelle bei ( 1 ) ,
Ausgabetabelle ( „Zusammengeführt“ )
) ;
// Aufräumen
Schließen ( ST , kein Speichern ) ;
Schließen ( FT , kein Speichern ) ;
) ;
Betreff: JSL-Setup mit „Join“ zusammenführenOkay, ich habe etwas Ähnliches versucht, bei dem ich meine offenen Tabellen an eine Liste gesendet habe:
Vor diesem Code hatte ich Code, in dem *txt-Dateien geöffnet (ich könnte bis zu 30+ Dateien haben) und in eine JMP-Datentabelle konvertiert wurden (somit Ausgabe von bis zu 30+ Tabellen).Ich versuche dann, alle diese Tabellen zusammenzuführen ein Tisch Einige Dateien enthalten jedoch möglicherweise doppelte Informationen, die gelöscht werden müssen. Ich habe herausgefunden, dass ich dies mithilfe der Eigenschaft „Tabelle verbinden“ tun kann.Also gemäß dem Code unten.Ich habe erfolgreich 1 Tabelle = MT erhalten und die anderen sind in einer Liste = OTs.Ich möchte jeden OTs aus der Liste hinzufügen und ihn mit MT verbinden, damit ich Folgendes erhalte:
MT+OT(1) = MergedTable, dann MergedTable+OT(2) = MergedTable2, dann MergedTable2+OT(3) = MergedTable3 usw., bis ich bekomme eine Mastertabelle, die alle Daten enthält (und die anderen sind geschlossen)
openDT = List();
Für (f = 1, f <= N Table(), f++,
Einfügen in(open DT, Data Table(f)););
Show(openDT);
MT = DataTable(1);
Close(Datentabelle(1), nosave);
OTs = List();
For(g = 1, g<= N Items(openDT) -1, g++,
Einfügen in (OTs, DataTable(g));
Alle schließen (DataTables, nosave);
Anzeigen(OTs);
Anzeigen(MT);
For( h = 1, h <= N Items(OTs), h++,
MT << Join(With(ST),
Aktualisieren,
Durch übereinstimmende Spalten(:Column_1 = :Column_1),
Drop-Vielfache(1,0),
Name("Nichtübereinstimmungen einschließen")(1, 1),
Reihenfolge der Haupttabelle beibehalten(1),
Ausgabetabelle("Zusammengeführt")););
Weitermachen());
Wenn ich das Skript ausführe, funktioniert alles einwandfrei, bis ich beim Befehl „Join“ die folgende Fehlermeldung erhalte
„Send erwartet ein skriptfähiges Objekt{169} beim Zugriff oder bei der Auswertung von ‚Send‘.“
Für( H = 1 , H <= N Artikel ( OTs ) , H ++,
MT << /*###*/ Verbinden (
Mit(ST),
Aktualisieren ,
Durch übereinstimmende Spalten( : Spalte_1 = : Spalte_1 ) ,
Vielfaches löschen( 1 , 0 ) ,
Name( „Nichtübereinstimmungen einbeziehen“ )( 1 , 1 ) ,
Reihenfolge der Haupttabelle beibehalten( 1 ) ,
Ausgabetabelle( „Zusammengeführt“ )) /*###*/ ;
Weitermachen();
Helfen? Ich stoße meinen Kopf gegen die Wand und versuche herauszufinden, warum das nicht funktioniert
Betreff: JSL-Setup mit „Join“ zusammenführenDies könnte Ihnen als Beispiel den Einstieg erleichtern. Es ist nicht perfekt, da nach der Ausführung auch die letzte offene Tabelle geschlossen ist ...
Close All(data tables);
New Table("a") << Add Rows(3);
:Column 1 << Set Values([1, 2, 3, 4, 5, 6]);
New Column("Label", Character) << Set Each Value("a");
New Table("b") << Add Rows(3);
:Column 1 << Set Values([1, 2, 3, 7, 8, 9]);
New Column("Label", Character) << Set Each Value("b");
New Table("c") << Add Rows(3);
:Column 1 << Set Values([1, 2, 3, 10, 11, 12]);
New Column("Label", Character) << Set Each Value("c");
New Table("d") << Add Rows(3);
:Column 1 << Set Values([1, 2, 3, 13, 14, 15]);
New Column("Label", Character) << Set Each Value("d");
t_count = N Table();
dt_old = Data Table(t_count);
Show(dt_old << get name());
dt_new = Data Table(1);
For(i = 2, i <= t_count, i++,
dt_old = dt_new;
dt_new = dt_old << Join(
With(Data Table(i)),
Merge Same Name Columns,
By Matching Columns(:Column 1 = :Column 1),
Drop multiples(1, 1),
Name("Include non-matches")(1, 1)
);
Close(dt_old);
);