Verweisen auf Spalten aus anderen TabellenIch versuche, eine neue Tabelle zu erstellen, indem ich aus zwei Quelltabellen lese.Ich möchte vermeiden, sie an einem großen Tisch zusammenzuführen und von dort aus zu manipulieren.Die neue Tabelle wird ein Array von Deltas zwischen den beiden Quelltabellen sein.Das Skript erstellt die Spalten einwandfrei, füllt sie jedoch nicht mit Inhalten.Ich gehe davon aus, dass mir beim Verweisen auf Spalten aus anderen Tabellen in meiner Formel eine Syntax fehlt.
predt = Open("C:\...\pre_data.jmp");
predtcols = predt << Get Column Names (string);
postdt = Open("C:\...\post_data.jmp");
postdtcols = postdt << Get Column Names (string);
dt = new table ("delta_values");
for (i=1, i <= NCols(predt), i++,
dt << New column ("delta_"||predtcols[i], numeric, continuous, formula(postdt:column(postdtcols[i]) - predt:column(predtcols[i])));
);Datenmischung und -bereinigungBetreff: Verweisen auf Spalten aus anderen TabellenDas lässt sich leicht überprüfen. Doppelklicken Sie in JMP auf die Spaltenüberschrift, um das Fenster „Spalteninfo“ zu öffnen. Der tatsächliche Spaltenname wird aufgeführt.Betreff: Verweisen auf Spalten aus anderen TabellenIch habe die Spaltennamen aus einer Excel-Tabelle (Ausgabe unseres Testers) importiert, daher glaube ich, dass sie in den Spaltennamen vergraben sind
Betreff: Verweisen auf Spalten aus anderen TabellenDie Einheiten (definiert als Spalteneigenschaft) sind nicht Teil des Spaltennamens.
Betreff: Verweisen auf Spalten aus anderen TabellenAh. Es sieht so aus, als hätten alle meine Spalten nach Spalte 2 ein (xxx) im Namen – die Maßeinheiten.Das könnte es sein?Das Protokoll gibt für jede solche Spalte einen Fehler aus
Betreff: Verweisen auf Spalten aus anderen TabellenIch gehe davon aus, dass es sich um ein Datenproblem handelt.Der Code hat für meinen Testfall mit 2 Spalten gut funktioniert, aber er ist so geschrieben, dass er so viele Spalten verarbeiten kann, wie er in der Variablen „predt“ findet.
For( i = 1, i <= N Cols( predt ), i++,
Was Sie also tun müssen, ist, den Code schrittweise durchzugehen, die Variablenwerte zu überprüfen und zu sehen, was passiert.Ohne die Veröffentlichung Ihrer Daten in dieser Diskussion weiß ich nicht, was los ist.
Werden im Protokoll Meldungen angezeigt?
Betreff: Verweisen auf Spalten aus anderen TabellenDanke für die schnelle Antwort!Es sieht so aus, als würde ich mit diesem Skript nur die Deltas der ersten beiden Spalten erhalten.Die Spalten sind genauso formatiert wie der Rest (numerisch, fortlaufend), daher bin ich mir nicht sicher, was hier vor sich geht.
Betreff: Verweisen auf Spalten aus anderen TabellenDu hattest ein paar Probleme, die dir in den Hintern gingen.
- Sie müssen << Rows() zur leeren Datentabelle hinzufügen;
- Das Format für die Verwendung der Column()-Funktion ist nicht postdt:column( postcols[i] ).Wenn dies die in dieser Situation zu verwendende Methode wäre, wäre die Form Column( postdt, postcols[i] ).Aber das ist hier nicht nötig
- Das Zuweisen von Formeln in New Column()-Operationen ist etwas knifflig.Die festgelegte Formula() wird nicht ausgewertet, bevor sie zur Formel gemacht wird.Das heißt, wenn Sie postcols[i] in eine Formel einfügen, wird beim Erstellen der Formel nicht nach dem Wert von postcols[i] gesucht, sondern einfach postcols[i] in die Formel eingefügt und dann versucht, sie auszuführen wenn die Formel ausgeführt wird.Das Problem dabei ist, dass, da die Variable „i“ in einer Schleife immer wieder neu zugewiesen wird, jede Formel, auf die „i“ verweist, jedes Mal geändert wird, wenn „i“ in JSL geändert wird.Das ist nicht das, was Sie wollen.Was also getan werden muss, ist, in JSL genau die Codezeichenfolge auszuwerten, die Sie benötigen, und dann diese JSL auszuführen, um die neue Spalte zu erstellen.Sie können dies in der korrigierten JSL unten sehen
predt = data table("one");//Open( "C:\...\pre_data.jmp" );
predtcols = predt << Get Column Names( string );
postdt = data table("two");//Open( "C:\...\post_data.jmp" );
postdtcols = postdt << Get Column Names( string );
dt = New Table( "delta_values" );
dt << add rows(nrows(postdt));
For( i = 1, i <= N Cols( predt ), i++,
Eval(
Parse(
"dt << New Column( \!"delta_" || predtcols[i] || "\!",
numeric,
continuous,
formula( postdt:" ||
postdtcols[i] || "[Row()] - predt:" || predtcols[i] || "[Row()]) )'"
)
)
);
dt << delete columns("column 1");