Benötigen Sie Hilfe bei Ausdrücken, Spaltenverweisen, Formeln und Spaltenumbenennungen?Alle,
Benötige im folgenden Fall Hilfe.
Ich habe einen Namen einer Spalte in einem String-Format.
Ich muss eine neue Spalte mit einer Formel erstellen, die auf der alten basiert. Ich mache es so:
oldCol = "OldColumn";
Eval( Eval Expr( dt << New Column( "NewColumn", formula( As Column( Expr( oldCol ) ) ) ) ) );
Später im Skript muss ich dann die alte Spalte umbenennen. So mach ich es:
Column(oldCol) << Set Name("NewOldColumn");Das Problem besteht nun darin, dass ich die Formel der neuen Spalte in der Form habe:
As Column("OldColumn")Es wird nicht aktualisiert, wenn OldColumn seinen Namen ändert.
Ich hätte es gerne in Form von
:OldColumn
aber ich weiß nicht, wie ich das machen soll.
Die Frage ist also: Wie muss ich den Ausdruck ändern:
Eval( Eval Expr( dt << New Column( "NewColumn", formula( As Column( Expr( oldCol ) ) ) ) ) );
so dass es eine Formel in Form von erzeugt :OldColumn , und nicht in der Form von Als Spalte("OldColumn") ?
Hier ist das vollständige Skript zum Spielen:
dt = New Table( "TestColumnsReferences",
Add Rows( 3 ),
New Column( "OldColumn", Character, "Nominal", Set Values( {"a", "b", "c"} ) )
);
oldCol = (dt << Get Column Names(string))[1];
//oldCol = "OldColumn";
Eval( Eval Expr( dt << New Column( "NewColumn", formula( As Column( Expr( oldCol ) ) ) ) ) );
Column(oldCol) << Set Name("NewOldColumn");Danke M.
Verbraucher- und MarktforschungBetreff: Benötigen Sie Hilfe bei Ausdrücken, Spaltenverweisen, Formeln und Spaltenumbenennungen?Vielen Dank für den Tipp zu JSL Quote()! Es ist jetzt wirklich viel übersichtlicher, da ich nicht mehr auf alle Anführungszeichen verzichten muss.
Betreff: Benötigen Sie Hilfe bei Ausdrücken, Spaltenverweisen, Formeln und Spaltenumbenennungen?Das Problem mit „Als Spalte“, wie ich in der Frage erklärt habe, besteht darin, dass es in der Formel verbleibt und wenn ich später den Namen der Spalte ändere, auf die ich in der Spalte verweise (und ich ändere ihn), wird die Formel ungültig
Es tut mir leid, mit Ihrer Kombination Expr --> Name Expr --> As Column funktioniert es! Es verwandelt As Column("string") in :string!
Mir wurden hier mehrere Lösungen angeboten, und die mit JSL Quote hat mir sehr gut gefallen, aber das ist mein neuer Favorit. Muss das Skript noch einmal überarbeiten 
Betreff: Benötigen Sie Hilfe bei Ausdrücken, Spaltenverweisen, Formeln und Spaltenumbenennungen?Eine weitere Option ist die Kombination von Eval(), EvalExpr(), Expr(), Name Expr() und As Column()
Names Default To Here(1);
dt = New Table("TestColumnsReferences", Add Rows(3),
New Column("OldColumn", Character, "Nominal", Set Values({"a", "b", "c"}))
);
oldCol = (dt << Get Column Names(string))[1];
//oldCol = "OldColumn";
Eval(Eval Expr(dt << New Column("NewColumn", formula(Expr(Name Expr(AsColumn(oldCol)))))));
Column(oldCol) << Set Name("NewOldColumn");Betreff: Benötigen Sie Hilfe bei Ausdrücken, Spaltenverweisen, Formeln und Spaltenumbenennungen?Persönlich benutze ich gerne das JSL-Zitat() Funktion, um die Syntaxhervorhebung und das lexikalische Parsen beizubehalten – und übergeben Sie dann einfach den Wert an die :Name() Richtlinie als solche
dt = New Table( "TestColumnsReferences",
Add Rows( 3 ),
New Column( "OldColumn", Character, "Nominal", Set Values( {"a", "b", "c"} ) )
);
oldCol = (dt << Get Column Names(string))[1];
//oldCol = "OldColumn";
Eval( Parse( Eval Insert( JSL Quote(
dt << New Column( "NewColumn", Formula( :Name("^oldCol^") ) )
) ) ) );
Column(oldCol) << Set Name("NewOldColumn");Betreff: Benötigen Sie Hilfe bei Ausdrücken, Spaltenverweisen, Formeln und Spaltenumbenennungen?Ja, im Wesentlichen derselbe Ansatz, den ich unten gezeigt habe, nur verwenden Ersatz anstatt Evaluierungseinlage , Rechts?
Betreff: Benötigen Sie Hilfe bei Ausdrücken, Spaltenverweisen, Formeln und Spaltenumbenennungen?Ok, ich habe es herausgefunden. Verwenden Sie für den Formelteil einfach die folgende Kette:
Name Expr(Expr(Parse(Eval Insert(":#oldCol#", startChar="#"))))Musste startChar="#" verwenden, da in echten Skriptformeln tatsächlich REgEx verwendet wird, wobei „^“ verwendet wird.
Das vollständige Skript lautet also:
dt = New Table( "TestColumnsReferences",
Add Rows( 3 ),
New Column( "OldColumn", Character, "Nominal", Set Values( {"a", "b", "c"} ) )
);
oldCol = (dt << Get Column Names(string))[1];
//oldCol = "OldColumn";
Eval( Eval Expr( dt << New Column( "NewColumn", formula( Name Expr(Expr(Parse(Eval Insert(":#oldCol#", startChar="#")))) ) ) ) );
Column(oldCol) << Set Name("NewOldColumn");Auf diese Weise hat die Formel funktioniert :OldColumn statt Als Spalte("OldColumn") und Sie können jetzt Spalten sicher umbenennen, ohne die Formel zu beschädigen.
Betreff: Benötigen Sie Hilfe bei Ausdrücken, Spaltenverweisen, Formeln und Spaltenumbenennungen?Hier ist ein Ansatz, der für mich funktioniert.Ich habe die Benennung erweitert, um komplexe JMP-Spaltennamen zu verarbeiten.Das verwirrt den Leser etwas, macht die Methode aber leistungsfähiger
dt = New Table( "TestColumnsReferences",
Add Rows( 3 ),
New Column( "OldColumn+one", Character, "Nominal", Set Values( {"a", "b", "c"} ) )
);
oldCol = (dt << Get Column Names( string ))[1];
//oldCol = "OldColumn";
//Eval( Eval Expr( dt << New Column( "NewColumn", formula( As Column( Expr( oldCol ) ) ) ) ) );
Eval(
Substitute(
Expr(
dt << New Column( "NewColumn", formula( __oldCol__ ) )
),
Expr( __oldCol__ ), parse(":\!"" || oldCol || "\!"n")
)
);
Column( oldCol ) << Set Name( "NewOldColumn" );
Betreff: Benötigen Sie Hilfe bei Ausdrücken, Spaltenverweisen, Formeln und Spaltenumbenennungen?Ich sehe eine Möglichkeit, das zu tun (aber lieber nicht auf diese Weise tun).
Holen Sie sich Spaltennamen nicht als Zeichenfolgen, sondern als Referenzen und verwenden Sie sie dann einfach Namensausdruck() :
oldCol = (dt << Get Column Names())[1];<BR />Eval( Eval Expr( dt << New Column( "NewColumn", formula( Name Expr( oldCol ) ) ) ) );
aber ich habe den Namen der Spalte bereits als String und möchte dabei bleiben.