Hai bisogno di aiuto con espressioni, riferimenti di colonna, formule e ridenominazione di colonneTutto,
Hai bisogno di aiuto nel seguente caso.
Ho un nome di una colonna in un formato stringa.
Devo creare una nuova colonna con una formula basata su quella vecchia. io faccio così:
oldCol = "OldColumn";
Eval( Eval Expr( dt << New Column( "NewColumn", formula( As Column( Expr( oldCol ) ) ) ) ) );
Quindi più avanti nello script devo rinominare la vecchia colonna. io faccio così:
Column(oldCol) << Set Name("NewOldColumn");Il problema ora è che poiché ho la formula della nuova colonna sotto forma di:
As Column("OldColumn")non si aggiorna quando OldColumn cambia nome.
Vorrei averlo sotto forma di
:OldColumn
ma non so come farlo.
Quindi, la domanda è: come devo modificare l'espressione:
Eval( Eval Expr( dt << New Column( "NewColumn", formula( As Column( Expr( oldCol ) ) ) ) ) );
in modo che produca formula sotto forma di :Vecchia colonna , e non sotto forma di Come Colonna("VecchiaColonna") ?
Ecco lo script completo con cui giocare:
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");Grazie, m.
Consumatori e ricerche di mercatoRi: Hai bisogno di aiuto con espressioni, riferimenti di colonna, formule e ridenominazione di colonneGrazie per il suggerimento su JSL Quote()! È davvero molto più pulito ora che non devo sfuggire a tutte le virgolette.
Ri: Hai bisogno di aiuto con espressioni, riferimenti di colonna, formule e ridenominazione di colonneIl problema con "As Column" come ho spiegato nella domanda è che rimane nella formula, e poi quando cambio il nome della colonna a cui mi riferisco nella colonna (e lo cambio) la formula diventa non valida
Mi scuso, con la tua combinazione Expr --> Name Expr --> As Column funziona! Trasforma As Column("string") in :string!
Mi sono state fornite diverse soluzioni qui e mi è piaciuta molto quella con JSL Quote, ma questa è la mia nuova preferita. Dovrò rifare la sceneggiatura da capo 
Ri: Hai bisogno di aiuto con espressioni, riferimenti di colonna, formule e ridenominazione di colonneUn'altra opzione è la combinazione di Eval(), EvalExpr(), Expr(), Name Expr() e 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");Ri: Hai bisogno di aiuto con espressioni, riferimenti di colonna, formule e ridenominazione di colonnePersonalmente mi piace usare il Citazione JSL() funzione per mantenere l'evidenziazione della sintassi e l'analisi lessicale, quindi basta passare il valore nel file :Nome() direttiva, in quanto tale
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");Ri: Hai bisogno di aiuto con espressioni, riferimenti di colonna, formule e ridenominazione di colonneSì, essenzialmente lo stesso approccio che ho mostrato di seguito, usa solo Sostituire invece di Inserisci valutazione , Giusto?
Ri: Hai bisogno di aiuto con espressioni, riferimenti di colonna, formule e ridenominazione di colonneOk, l'ho capito. Per la parte della formula basta usare la seguente catena:
Name Expr(Expr(Parse(Eval Insert(":#oldCol#", startChar="#"))))Ho dovuto usare startChar="#" poiché nella formula dello script reale utilizza effettivamente REgEx dove viene utilizzato "^".
Quindi lo script completo è questo:
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");In questo modo la formula ha :Vecchia colonna piuttosto che Come Colonna("VecchiaColonna") e ora puoi tranquillamente rinominare le colonne senza interrompere la formula.
Ri: Hai bisogno di aiuto con espressioni, riferimenti di colonna, formule e ridenominazione di colonneEcco un approccio che funziona per me.Ho ampliato la denominazione per gestire nomi di colonne JMP complessi.Questo confonde un po' il lettore, ma rende il metodo più potente
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" );
Ri: Hai bisogno di aiuto con espressioni, riferimenti di colonna, formule e ridenominazione di colonneVedo un modo per farlo (ma piuttosto non farlo in questo modo).
Ottieni i nomi delle colonne non come stringhe, ma come riferimenti, quindi utilizzali Nome Espr() :
oldCol = (dt << Get Column Names())[1];<BR />Eval( Eval Expr( dt << New Column( "NewColumn", formula( Name Expr( oldCol ) ) ) ) );
ma ho già il nome della colonna come stringa e vorrei mantenerlo.