Spaltenteilmenge oder Zellbereich von Tabelle zu Tabelle kopierenIch habe zwei Datentabellen. Einige Spalten in Tabelle2 sind identisch mit den Spalten Tabelle1.
Ich sollte die Daten der identischen Spalten nicht von Tabelle2 nach Tabelle1 kopieren.
Das bedeutet natürlich, dass (1) Tabelle1 um die Anzahl der Zeilen in Tabelle2 erweitert wird und (2) in Tabelle1 Daten fehlen. Das ist ok.
Mein Problem ist, wie man die Daten von Tabelle2 nach Tabelle1 kopiert.
Beispiel: Beide Tabellen haben die Spalte „NAME“. Tabelle1 hat 1000 Zeilen, Tabelle2 hat 2000 Zeilen.
Das Ergebnis ist: Tabelle1 mit 3000 Zeilen und „NAME“ in Tabelle1 ist eine „Verkettung“ beider NAME-Spalten. Andere Spalten in Tabelle 1 enthalten 2000 fehlende/leere Daten.
Übrigens sind Tabellen in Wirklichkeit viel größer und es gibt 10–20 identische Spalten (von ~100). Ich werde mich damit befassen, sobald ich die Grundfunktion herausgefunden habe. Ich erwähne es für den Fall, dass es ein Problem mit dieser Größe gibt.
Vielen Dank
Betreff: Spaltenteilmenge oder Zellbereich von Tabelle zu Tabelle kopierenBei dem Beispiel hat bei mir etwas nicht funktioniert.
Aber egal, mir kam die Idee und es schien zu funktionieren, indem ich einen Test mit wenigen Eingabedateien durchführte.
Scheint, als hätte ich die Dinge unnötig verkompliziert, während ich einen direkten Weg vor Augen hatte.
Danke für Ihre Geduld
Betreff: Spaltenteilmenge oder Zellbereich von Tabelle zu Tabelle kopieren
@RonB schrieb:
Ja ich verstehe das. Aber die Datenstruktur, mit der ich es zu tun habe, erfordert, dass auch Spalten in Big Class kopiert werden, die in Fitness nicht denselben Namen haben. Das heißt, diese Spalten werden als neue Spalten mit der Ausgabetabelle „vertikal verkettet“. Diese Spalten beginnen mit fehlenden Daten (so viele Zeilen wie in Fitness vorhanden sind), gefolgt von den Daten aus Big Class.
Wie unterscheidet sich das von der einfachen Verkettung der beiden Tabellen? Dadurch erhalten Sie eine Tabelle mit allen Zeilen und Spalten beider Tabellen. Die Spalten, die in beiden Tabellen keine übereinstimmenden Namen haben, sind für die Zeilen leer, die diese Spalten ursprünglich nicht hatten.
Hören wir auf, abstrakt zu reden und werden wir konkreter. Hier sind zwei Tabellen:
Tabelle 1
Tabelle 2
Wenn Sie „Tabellen->Verketten“ für diese beiden Tabellen verwenden, erhalten Sie diese Tabelle.
Tisch 3
| A |
B |
C |
D |
| 1 |
1 |
1
|
• |
| 2 |
2 |
2 |
• |
| 3 |
3 |
3 |
• |
| 4 |
4 |
• |
4 |
| 5 |
5 |
• |
5 |
| 6 |
6 |
• |
6 |
Die Art und Weise, wie ich Ihre Beschreibung oben interpretiere, lässt mich denken, dass dies der Tisch ist, den Sie wollen. Wenn nicht, tut es mir leid, dass ich Ihre Anforderung falsch verstanden habe.
Betreff: Spaltenteilmenge oder Zellbereich von Tabelle zu Tabelle kopierenJa ich verstehe das. Aber die Datenstruktur, mit der ich es zu tun habe, erfordert, dass auch Spalten in Big Class kopiert werden, die in Fitness nicht denselben Namen haben. Das heißt, diese Spalten werden als neue Spalten mit der Ausgabetabelle „vertikal verkettet“. Diese Spalten beginnen mit fehlenden Daten (so viele Zeilen wie in Fitness vorhanden sind), gefolgt von den Daten aus der Big Class.
Ich denke, ich kann es schaffen, indem ich zunächst neue Spalten zu „Fitness“ hinzufüge, die alle unterschiedlichen Namen in der „Großen Klasse“ enthalten. Verwenden Sie dann die gleiche Methode, die Sie mir gezeigt haben, indem Sie Big Class nur mit diesen Spalten unterteilen und die Verkettung durchführen.
Es ist eine Menge Arbeit, aber ich sehe keine andere Möglichkeit, mit der großen Anzahl an Tabellen und Spalten umzugehen, die ich habe.
Nochmals vielen Dank
Betreff: Spaltenteilmenge oder Zellbereich von Tabelle zu Tabelle kopieren
@RonB schrieb:
Jetzt muss ich nur noch herausfinden, wie ich die nicht übereinstimmenden Spalten kopieren kann, aber ich denke, das schaffe ich.
Nicht übereinstimmende Spalten aus welcher Tabelle? Das obige Beispiel behält alle Spalten aus der Fitness-Tabelle bei und verkettet nur die Spalten mit demselben Namen aus Big Class. Dazu wird nur „Big Class“ untergeordnet, um die Spalten mit den gleichen Namen zu erhalten, und diese dann mit „Fitness“ verkettet (das immer noch alle Spalten enthält).Es sollte keine Arbeit geben, die nicht übereinstimmenden Spalten beizubehalten.
Betreff: Spaltenteilmenge oder Zellbereich von Tabelle zu Tabelle kopierenHat funktioniert. Vielen Dank. Jetzt muss ich nur noch herausfinden, wie ich die nicht übereinstimmenden Spalten kopieren kann, aber ich denke, das schaffe ich.
Betreff: Spaltenteilmenge oder Zellbereich von Tabelle zu Tabelle kopierenIch werde es versuchen und zurückmelden (kann aufgrund unabhängiger Umstände eine Weile dauern).
Viele tx
Betreff: Spaltenteilmenge oder Zellbereich von Tabelle zu Tabelle kopieren
@RonB schrieb:
Wenn ich Sie verstehe, muss ich Tabelle2.1 mit den Spalten ea erstellen, sie dann in ae umordnen und Tabelle2.1 mit Tabelle1 verketten?
Sie haben es, Sie müssen die Spalten jedoch nicht neu anordnen. Tabellen->Übereinstimmungen nach Spaltennamen verketten, nicht nach Position.
Die Teilmenge basiert auf der Spaltenauswahl. Daher müssen Sie die Spalten auswählen, die die beiden Tabellen gemeinsam haben. Aber das ist einfach, weil Sie einfach alle Spaltennamen aus Tabelle 1 abrufen und die gesamte Liste anhand von Tabelle 2 auswählen können. Alle nicht vorhandenen werden ignoriert.
Hier ist ein Beispiel mit zwei der Beispieldatentabellen.
bc = Open( "$SAMPLE_DATA\Big Class.jmp" );
fit = Open( "$SAMPLE_DATA\Fitness.jmp" );
fit_cols = fit << get column names;
bc << select columns( fit_cols );
sub_bc = bc << Subset( All rows, Selected columns only( 1 ) );
fit << Concatenate( sub_bc );
//if you don't want a new table you can use "Append to first table"
fit << Concatenate( sub_bc, Append to first table );
Betreff: Spaltenteilmenge oder Zellbereich von Tabelle zu Tabelle kopierenOK. Gute Ermutigung.
Tabelle1 hat die Spalten abcde, Tabelle2 hat die Spalten xyezau v. Ich möchte nur die Spalten von Tabelle2 mit Tabelle1 verketten. Wie würden Sie das angehen?
Wenn ich Sie verstehe, muss ich Tabelle2.1 mit den Spalten ea erstellen, sie dann in ae umordnen und Tabelle2.1 mit Tabelle1 verketten?
Betreff: Spaltenteilmenge oder Zellbereich von Tabelle zu Tabelle kopierenGeben Sie die integrierten Funktionen wie Tabellen->Verketten nicht so schnell auf.
Wenn Sie nur die Spalten mit demselben Namen in zwei Tabellen haben möchten, können Sie mit „Tabellen->Subset“ zwei Tabellen erstellen, die nur die Spalten aus jeder Tabelle enthalten, und diese beiden Tabellen dann verketten.
Betreff: Spaltenteilmenge oder Zellbereich von Tabelle zu Tabelle kopierenDanke noch einmal. Leider reicht die Verkettung nicht aus, da meine Datensätze bizarr sind.
Ich muss nur bestimmte Spalten verketten und ignoriere den Test.
Ich kann jederzeit alle Zeilen in der Quelltabelle durchlaufen, Zeilen in die Zieltabellen einfügen und dann den Spaltenwert einzeln festlegen. Aber ich befürchte, dass es die CPU belasten wird – mein Skript wird über 100 Dateien mit Dutzenden von Spalten und Tausenden von Zeilen verarbeiten. Außerdem ist es keine elegante Lösung, wenn auch wahrscheinlich unvermeidlich.
Ich werde meine Frage vereinfachen.
Kann ich so etwas tun?
Column(dt, i)[from,to] = Liste oder Matrix von Werten
Danke für deine Geduld,
Betreff: Spaltenteilmenge oder Zellbereich von Tabelle zu Tabelle kopierenBei der Verkettung werden nicht übereinstimmende Spalten nicht ignoriert.Hier ist ein Beispiel für die Beispieldatentabellen „Big Class“ und „Big Class Families“.Bitte beachten Sie, dass die Big-Class-Datentabelle am Ende alle Spalten enthält, die die Big-Class-Familien haben und die nicht in der ursprünglichen Big-Class-Datentabelle enthalten sind.
Names Default To Here( 1 );
dt1 = Open( "$SAMPLE_DATA/big class.jmp" );
dt2 = Open( "$SAMPLE_DATA/big class families.jmp" );
dt1 << concatenate( dt2, Append to First Table( 1 ) );
Betreff: Spaltenteilmenge oder Zellbereich von Tabelle zu Tabelle kopierenDanke.
Die Funktion „Verketten“ funktioniert nicht, da ich sie nur für Spalten ausführen muss, die in beiden Tabellen identisch sind, und alle anderen überspringen muss.
Ich habe versucht, die Quellspaltendaten in einer Matrix/Liste zu speichern und dann den Wert für die Zielspalte (die zweite Tabelle) mithilfe des Abonnements [I,j] festzulegen, aber ich glaube, mir fehlt etwas.
Betreff: Spaltenteilmenge oder Zellbereich von Tabelle zu Tabelle kopierenSie können den Code von JMP für Sie generieren lassen.
Führen Sie das aus
Tabellen==>Verketten
Gehen Sie dann in der neuen Datentabelle interaktiv in den Tabellenbereich auf der linken Seite der Datentabelle, klicken Sie mit der rechten Maustaste auf den Eintrag „Quelle“ und wählen Sie „Bearbeiten“.Dort sehen Sie die JSL, die zum Verketten der Dateien erforderlich ist.
Die JSL ist grundsätzlich
dt1=data table(<YOUR first="" table="">);
dt2=data table(<YOUR second="" table="">);
dt1 = dt1 << concatenate( dt2, Append to First Table(1));</YOUR></YOUR>
Betreff: Spaltenteilmenge oder Zellbereich von Tabelle zu Tabelle kopierenDanke. Ich habe darüber nachgedacht. Allerdings muss ich das mit einem Skript machen, da ich viele solcher Dateien habe und sich die Reihenfolge der Spalten von eins zu eins ändert.
Ich würde gerne einen Code finden, der das macht.
Danke
Betreff: Spaltenteilmenge oder Zellbereich von Tabelle zu Tabelle kopierenJMP verkettet Datentabellen mithilfe von
Tabellen==>Verketten
Beim Verketten werden die Spalten nach Spaltennamen sortiert.Fehlende Werte werden automatisch in den Zeilen für Spalten hinzugefügt, die in der einen oder anderen Datentabelle nicht vorkommen.
Die Verkettungsplattform behält den Namen für übereinstimmende Spalten bei und fügt nur neue Spaltennamen für Spalten hinzu, die nicht in der Basisdatentabelle enthalten waren.
Zur Dokumentation siehe:
Hilfe==>Bücher==>JMP verwenden