JSL-Setup mit "Join" zusammenführen<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ich habe festgestellt, dass ich zwei Datensätze am besten zusammenführen kann, indem ich den Befehl "Datentabellen verbinden" verwende. Dies beseitigt am besten mögliche doppelte Einträge, die möglicherweise vorhanden sind - 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 separat aufzurufen, damit das Skript "join" richtig funktioniert:
Wenn ich dies manuell mache, lautet der Code wie folgt:
Datentabelle ( "Ohne Titel 322" ) << Verbinden ( Datentabelle ( "Ohne Titel 318" ) ) ,
Gleichnamige Spalten zusammenführen ,
Durch übereinstimmende Spalten ( : REPLICATE_ID = : REPLICATE_ID ) ,
Vielfache fallen lassen ( 1 , 1 ) ,
Name( „Nichtübereinstimmungen einschließen“ )( 1 , 1 ) ,
Reihenfolge der Haupttabelle beibehalten ( 1 ) ,
Ausgabetabelle ( "Zusammengeführt" )
Mein Problem tritt auf, wenn ich versuche, dieses Formular in mehreren Tabellen zu codieren.Die unbenannten Tabellen (unbenannt 322, unbenannt 318 usw. - es können mehr sein, je nachdem, wie viele Dateien ich öffne) werden in meinem Code als bezeichnet. Also ich will irgendwie mein max nehmenund verbinden Sie sich 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ührenIch entschuldige mich, ich glaube, ich habe mich nicht klar ausgedrückt:
Ich verstehe, dass ich die Tabellen, die der Liste hinzugefügt wurden, offen halten muss - wenn ich Close All (Data Tables, nosave) in meinem Code auskommentiere, bekomme ich
Folgendes in meinem Log (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 engen fxn für diese Tabelle brauche, und ich könnte das herausfinden.Ich habe zuvor angegeben, dass die Zusammenführung funktioniert, aber nicht, wie ich es haben möchte.

Aber in meinem Code, wo ich //unsichtbar 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, auf diese zu verweisen und sie in einer Liste zu halten, damit ich auf sie als Ganzes verweisen kann. (Close all ist auch auskommentiert) Wie mache ich das?

Unsichtbarkeit ist das Problem, b/c, wenn ich keine Möglichkeit finde, auf jede unsichtbare Tabelle zu verweisen, kann ich auf keinen Fall mehrere Tabellen zusammenführen. Es sieht so aus, als müsste ich den Join-Code in die Schleife verschieben, aber ich weiß nicht, wie ich das einbauen soll, wenn es nur eine Tabelle gleichzeitig 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 Tische sind nicht dasselbe. Geschlossene Tische sind völlig nutzlos, sie sind weg und vergessen. In dem Skript, das Sie platziert haben Alle schließen ( Datentabellen , nicht sparen ) ; 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, unsichtbar oder nicht.
Oder verwenden Sie meinen obigen Ansatz, dh öffnen Sie eine Tabelle nach der anderen, bearbeiten und teilen Sie sie nach Belieben und führen Sie sie dann mit der aktuellen MT zusammen, bevor Sie sie schließen und zur nächsten Datei übergehen.
Betreff: JSL-Setup mit "Join" zusammenführenHmmm, ich kann die ursprünglichen TXT-Dateien jedoch nicht zusammenführen - ich füge die unsichtbaren Zwischendateien zusammen, die durch das Teilen/Formatieren der ursprünglichen TXT-Dateien erstellt wurden.Da diese Dateien unsichtbar und zwischengeschaltet sind, gibt es kein Stammverzeichnis, in dem sie gespeichert werden (der Punkt, warum ich die unsichtbare Funktion verwende – sie spart Platz und Zeit). Ich verstehe, was Sie sagen, obwohl meine Tabellen in der Liste sind, sind sie geschlossen, sodass es keine Möglichkeit gibt, auf sie zu verweisen, aber das "Öffnen" gilt nicht, da es sich um Zwischen-/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 den Code der TXT-Dateien, der dem ähnelt, den Sie haben (Will Name Data Table ("Result1") haben)
2. Ich formatiere diese txt-Dateien neu (sie sind nicht im Spaltenformat, also habe ich Code, wo ich in JMP eine besser lesbare Datentabelle "aufteile", formatiere usw. - Ich werde diese INTERMEDIATE-Tabellen nennen (wird den Namen Data Table ("Untitled1") haben)
3. Diese Zwischendateien sind unsichtbar (es gibt 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, es wäre einfacher, einfach die Originaldateien zusammenzufügen, aber sie kommen nicht in einem Format, in dem ich das tun kann, daher mein Rätsel.
Der Code, den ich habe (und zuvor referenziert habe), funktioniert also, wenn meine Zwischentabellen nicht unsichtbar sind UND ich die Zwischentabellen, auf die ich verweise, nicht schließe (funktioniert nicht genau so, wie ich es will, aber es funktioniert trotzdem) - aber dann habe ich ALLE Tabellen geöffnet - die zusammengeführten und nicht zusammengeführten
Die eigentlichen Fragen, die ich habe, sind also:
a) Ich habe Zwischentabellen – im Wesentlichen möchte ich, dass sie unsichtbar sind, aber um auf sie in den MT/OTs-Listen zu verweisen, muss ich sie sichtbar machen, damit dies funktioniert – im Wesentlichen möchte ich diese jedoch unsichtbar machen.Also meine eigentliche Frage ist: Wie verweise ich auf unsichtbare Zwischentabellen mit 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 des Zwischenprodukts verbinden kann Tabellen)?
Ich habe das Skript angehängt.vielleicht erklärt das was ich vorhabe.
Betreff: JSL-Setup mit "Join" zusammenführenSieht so aus, als wären alle Tabellen vor Join() geschlossen. Die Liste OTs ist nur eine Liste von Datentabellenreferenzen. Sie sind keine "skriptfähigen Objekte", wenn die entsprechenden Tabellen weg sind.
Versuchen Sie so etwas:
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
Zum ( ich = n , ich > 0 , ich --,
Wenn ( Enthält ( flist [ ich ] , ".txt" ) == 0 ,
Entfernen von ( flist , ich ) ;
n --;
)
) ;
// Funktion für offene Textdateien (Spalte bearbeiten und ggf. 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 ) ,
Daten beginnen ( 2 ) ,
Zeilen zum Lesen ( Alle ) ,
Jahresregel ( "10-90" )
)
)
) ;
// Erste Datei öffnen
MT = Datei öffnen ( 1 ) ;
//Alle Dateien in flist verbinden
Zum ( ich = 2 , ich <= n , ich ++,
ST = Datei öffnen ( ich ) ;
FT = MT ;
MT = FT << Verbinden (
Mit ( ST ) ,
Aktualisieren ,
Durch übereinstimmende Spalten ( : Spalte_1 = : Spalte_1 ) ,
Vielfache fallen lassen ( 1 , 0 ) ,
Name ( „Nichtübereinstimmungen einschließen“ )( 1 , 1 ) ,
Haupttabellenreihenfolge beibehalten ( 1 ) ,
Ausgabetabelle ( "Zusammengeführt" )
) ;
// Aufräumen
Nah dran ( ST , kein speichern ) ;
Nah dran ( FT , kein speichern ) ;
) ;
Betreff: JSL-Setup mit "Join" zusammenführenOkay, ich habe etwas Ähnliches versucht, wo ich meine offenen Tabellen an eine Liste gesendet habe:
Vor diesem Code habe ich Code, in dem *txt-Dateien geöffnet werden (ich könnte bis zu 30+ Dateien haben) und in eine JMP-Datentabelle konvertiert werden (also 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 festgestellt, dass ich dies mit der Eigenschaft Join-Tabelle tun kann.Also nach dem Code unten.Ich bekomme erfolgreich 1 Tabelle = MT, und die anderen sind in einer Liste = OTs.Ich möchte jedem OT aus der Liste beitreten und es mit MT verbinden, damit ich Folgendes bekomme:
MT+OT(1) = MergedTable, dann MergedTable+OT(2) = MergedTable2, dann MergedTable2+OT(3) = MergedTable3 usw. bis ich komme eine Haupttabelle mit allen Daten (und die anderen sind geschlossen)
openDT = Liste();
Für (f = 1, f <= N Tabelle(), f++,
Einfügen in (Öffnen von DT, Datentabelle (f)););
Show(openDT);
MT = Datentabelle (1);
Close(Datentabelle(1), nosave);
OTs = Liste ();
For(g = 1, g<= N Items(openDT) -1, g++,
Einfügen in (OTs, DataTable(g));
Alle schließen (DataTables, nosave);
Show(OTs);
Zeigen (MT);
For( h = 1, h <= N Items(OTs), h++,
MT << Join(With(ST),
Aktualisieren,
Durch übereinstimmende Spalten (:Spalte_1 = :Spalte_1),
Vielfache fallen lassen (1,0),
Name("Nichtübereinstimmungen einschließen")(1, 1),
Haupttabellenreihenfolge beibehalten(1),
Ausgabetabelle("Zusammengeführt")););
Fortsetzen());
Wenn ich das Skript ausführe, funktioniert alles einwandfrei, bis zum Join-Befehl, bei dem ich die folgende Fehlermeldung erhalte
"Send erwartet ein skriptfähiges Objekt{169} beim Zugriff oder der Auswertung von 'Send'",
Zum( h = 1 , h <= N Artikel ( OTs ) , h ++,
M.T. << /*##*/ Verbinden (
Mit (ST),
Aktualisieren ,
Durch übereinstimmende Spalten ( : Spalte_1 = : Spalte_1 ) ,
Vielfache fallen lassen ( 1 , 0 ) ,
Name( „Nichtübereinstimmungen einschließen“ )( 1 , 1 ) ,
Reihenfolge der Haupttabelle beibehalten ( 1 ) ,
Ausgabetabelle ( "Zusammengeführt" )) /*##****/ ;
Fortsetzen();
Hilfe? Ich schlage 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 der letzte der offenen Tische geschlossen wird ...
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);
);