chiama una colonna facendo riferimento a una variabileUn principiante completo qui,
non ho trovato la soluzione nei post più vecchi,
Ho creato una variabile contenente un nome di colonna esistente. Voglio creare una nuova colonna, dove vengono sommati i dati di altre due colonne (chiamando le colonne per variabili). l'uso della variabile è per un uso successivo in un ciclo for.
Grazie dell'aiuto!
per il codice seguente:
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)));
ottengo il seguente errore:
Colonna new_Column 1 2 Formula interrotta
Impossibile convertire l'argomento in un numero [o matrice] 1 volte At rows: 2 Operazione: Add, Column( dt, columnname1 ) + /*####*/Column( dt, columnname2 ) /*####*/
Gli errori di valutazione della formula sono stati ignorati
Colonna( "nuova_colonna 1 2" )
Modellazione statistica avanzataAccesso ai datiMiscelazione e pulizia dei datiEsplorazione e visualizzazione dei datiRi: chiama una colonna facendo riferimento alla variabile@txnelson ha perfettamente ragione su questo.Il metodo che ho suggerito era un'opzione pigra e, col senno di poi, non un approccio che consiglierei.Se vuoi solo una colonna con valori corretti puoi eseguire un calcolo in un ciclo e non preoccuparti di una formula; se la formula è importante per te, devi verificare che il tuo script abbia codificato correttamente la formula - non è sufficiente che i numeri appaiano corretti.Le variabili di script non persisteranno oltre la durata dello script, quindi la formula deve includere correttamente i riferimenti di colonna: ciò si ottiene utilizzando tecniche di sostituzione delle espressioni come quella illustrata da Jim.
Ri: chiama una colonna facendo riferimento alla variabilegrazie per la tua rapida risposta. funziona!
Ri: chiama una colonna facendo riferimento alla variabilePuoi farlo funzionare, con
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 )
)
);
Tuttavia, c'è un potenziale problema con questo.La formula memorizzata è:

Questa formula continuerà a funzionare per tutta la durata della sessione JMP
- Ha le variabili, dt, columnname1 e columnname2 definite.Cosa succede se salvi la tabella dei dati, spegni JMP e poi domani entri e avvii JMP e apri la tabella dei dati.La formula non troverà quelle variabili e la formula fallirà.
- All'interno della sessione, le variabili, dt, columnname1 e columnname2, non cambiano il loro valore.Quindi, se crei questa colonna e successivamente nello script, ti capita di modificare il valore della variabile columnname1, poiché le colonne formula in una tabella dati JMP sono dinamiche, la formula verrà eseguita di nuovo quando si verificano modifiche alla tabella dati, JMP utilizzerà il nuovo valore della variabile e creerà nuovi valori per la colonna della formula.
Quello che devi veramente fare è utilizzare un metodo che crei l'effettiva sintassi JSL per la formula.Nell'esempio sopra, quello che vuoi veramente è che la formula sia
:height + :weight
Il JSL di seguito è un modo per farlo.Utilizza la funzione Substitute() per impiantare i nomi effettivi delle colonne nella formula.
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 )
)
);Ri: chiama una colonna facendo riferimento alla variabileHai già creato variabili che fanno riferimento alle colonne.Puoi usarli nella tua formula, ma devi usare la funzione AsColumn:
formula( AsColumn(columnname1) + AsColumn(columnname2) )
Ri: chiama una colonna facendo riferimento alla variabileSolo per i futuri lettori di questa domanda:
Ho usato il codice sopra per passare i nomi delle colonne di stringhe alle formule ma ho avuto problemi con l'uso di
Parse(":" || column_name)L'analisi è vulnerabile ai nomi di colonna dispari poiché i nomi di colonna come "a - b" verrebbero interpretati come colonna "a" meno variabile "b".
Usa invece
As Name(columnname)
che risolve questo problema.