Rufen Sie eine Spalte auf, indem Sie auf eine Variable verweisenEin absoluter Neuling hier,
Konnte die Lösung in älteren Beiträgen nicht finden,
Ich habe eine Variable erstellt, die einen vorhandenen Spaltennamen enthält. Ich möchte eine neue Spalte erstellen, in der die Daten aus zwei anderen Spalten summiert werden (Aufruf der Spalten nach Variablen). Die Verwendung einer Variablen dient der späteren Verwendung in einer for-Schleife.
Danke fürs Helfen!
für den folgenden Code:
dt = Current Data Table();
columnname1 = Column( dt, 1 ) << Get Name;
columnname2 = Column( dt, 2 ) << Get Name;
dt << New Column( "new_" || columnname1, Numeric , continuous, formula(column(dt, columnname1)+column(dt, columnname2)));
Ich erhalte die folgende Fehlermeldung:
Spalte new_Column 1 2 Formel unterbrochen
Argument kann nicht 1 Mal in eine Zahl [oder Matrix] konvertiert werden. Bei Zeilen: 2 Operation: Add, Column( dt, columnsname1 ) + /*###*/Column( dt, columnsname2 ) /*###*/
Fehler bei der Formelauswertung wurden ignoriert
Spalte( "new_Column 1 2" )
Erweiterte statistische ModellierungDatenzugriffDatenmischung und -bereinigungDatenexploration und -visualisierungBetreff: Rufen Sie eine Spalte auf, indem Sie auf eine Variable verweisen@txnelson hat da völlig recht.Die von mir vorgeschlagene Methode war eine faule Option und im Nachhinein kein Ansatz, den ich empfehlen würde.Wenn Sie nur eine Spalte mit korrekten Werten benötigen, können Sie eine Berechnung in einer Schleife durchführen und sich nicht mit einer Formel herumschlagen; Wenn die Formel für Sie wichtig ist, müssen Sie überprüfen, ob Ihr Skript die Formel korrekt codiert hat – es reicht nicht aus, dass die Zahlen korrekt angezeigt werden.Skriptvariablen bleiben nicht über die Lebensdauer des Skripts hinaus bestehen, daher muss die Formel Spaltenverweise korrekt enthalten. Dies wird durch die Verwendung von Ausdrucksersetzungstechniken wie der von Jim veranschaulichten erreicht.
Betreff: Rufen Sie eine Spalte auf, indem Sie auf eine Variable verweisenDanke für ihre schnelle Antwort. Es klappt!
Betreff: Rufen Sie eine Spalte auf, indem Sie auf eine Variable verweisenSie können es mit zum Laufen bringen
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );
columnname1 = Column( dt, 4 ) << Get Name;
columnname2 = Column( dt, 5 ) << Get Name;
dt << New Column( "new_" || columnname1,
Numeric,
continuous,
formula(
As Column( dt, columnname1 ) + As Column( dt, columnname2 )
)
);
Allerdings besteht hierbei ein potenzielles Problem.Die gespeicherte Formel lautet:

Diese Formel funktioniert so lange wie Ihre JMP-Sitzung
- Hat die Variablen dt, Spaltenname1 und Spaltenname2 definiert.Was passiert, wenn Sie die Datentabelle speichern, JMP herunterfahren und dann morgen JMP starten und die Datentabelle öffnen?Die Formel findet diese Variablen nicht und die Formel schlägt fehl.
- Innerhalb der Sitzung ändern die Variablen dt, Spaltenname1 und Spaltenname2 ihren Wert nicht.Wenn Sie also diese Spalte erstellen und später in Ihrem Skript zufällig den Wert der Variablen „Spaltenname1“ ändern, wird die Formel erneut ausgeführt, wenn Änderungen an der Datentabelle vorgenommen werden, JMP, da Formelspalten in einer JMP-Datentabelle dynamisch sind verwendet den neuen Wert der Variablen und erstellt neue Werte für die Formelspalte.
Was Sie wirklich tun müssen, ist die Verwendung einer Methode, die die eigentliche JSL-Syntax für die Formel erstellt.Im obigen Beispiel möchten Sie eigentlich, dass die Formel so ist
:height + :weight
Die folgende JSL ist eine Möglichkeit, dies zu tun.Es verwendet die Funktion Substitute(), um die tatsächlichen Spaltennamen in die Formel zu implantieren.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );
columnname1 = Column( dt, 4 ) << Get Name;
columnname2 = Column( dt, 5 ) << Get Name;
Eval(
Substitute(
Expr(
dt << New Column( "new_" || columnname1,
Numeric,
continuous,
formula( __c1__ + __c2__ )
)
),
Expr( __c1__ ), Parse( ":" || columnname1 ),
Expr( __c2__ ), Parse( ":" || columnname2 )
)
);Betreff: Rufen Sie eine Spalte auf, indem Sie auf eine Variable verweisenSie haben bereits Variablen erstellt, die auf die Spalten verweisen.Sie können diese in Ihrer Formel verwenden, müssen jedoch die AsColumn-Funktion verwenden:
formula( AsColumn(columnname1) + AsColumn(columnname2) )
Betreff: Aufrufen einer Spalte durch Verweisen auf eine VariableNur für zukünftige Leser dieser Frage:
Ich habe den obigen Code verwendet, um Zeichenfolgenspaltennamen an Formeln zu übergeben, hatte jedoch Probleme mit der Verwendung von
Parse(":" || column_name)Parse ist anfällig für ungerade Spaltennamen, da Spaltennamen wie „a – b“ als Spalte „a“ minus Variable „b“ interpretiert würden.
Verwenden Sie stattdessen
As Name(columnname)
wodurch dieses Problem behoben wird.