Come utilizzare i valori delle colonne come input per una formula in uno script?Tutto,
Credo che la mia domanda sia molto semplice ma devo ancora trovare una risposta.
Ho una tabella dati come mostrato di seguito

spero che
a) includere 3 nuove colonne denominate %CFB colonna 3, %CFB colonna 4 e % CFB colonna 5. %CFB indica la variazione percentuale rispetto al basale.
b) In ogni nuova colonna desidero inserire la variazione% rispetto al basale con valori derivati dalla seguente formula
%CFB = (x - Colonna 3)/Colonna 3, dove "x" verrà sostituito con i valori della Colonna 3, 4 o 5 su ciascuna iterazione codificata di seguito.La colonna 3 è il valore di base
dt = Current Data Table();
startcol = 3;
endcol = 5;
For( i = startcol, i <= endcol, i++,
data_col = Column( i ) << get name;
New column ("%CFB " || data_col) << Formula((( :data_col - :column 3) / :column 3) * 100 ));
Utilizzando lo script sopra sono stato in grado di creare nuove colonne ma al loro interno non è stato inserito alcun risultato dalla formula.Quando scambio manualmente colonna 3 per dati_col nella formula tutte le nuove colonne vengono valutate come zero come mi aspetterei.Questo mi dice che la formula è almeno corretta e la variabile data_col non viene interpretata/sostituita come vorrei.Qualsiasi intuizione su come farlo funzionare sarebbe apprezzata.
Grazie in anticipo per il vostro aiuto
Floyd Fox
Ri: Come utilizzare i valori delle colonne come input per una formula in uno script?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Non so quanto le opinioni siano benvenute, ma ecco qui.
Personalmente sono un grande avversario di Eval(Parse()), proprio perché riduce drasticamente la leggibilità all'interno dell'editor.Ho visto script di 5000 righe che sono, per la maggior parte, interamente rosa (o qualunque colore tu scelga per le tue stringhe).Con la possibilità di sostituire le espressioni, mantieni intatta l'evidenziazione della sintassi e penso che renda molto più semplice la modifica degli script di altre persone.
Uso ancora molto occasionalmente eval(parse()), provo a usare JSL quote() anche se quando devo.
Ri: Come utilizzare i valori delle colonne come input per una formula in uno script?Nota eccellente su come gestire l'ambito lì WK Avvolgendo tutto insieme per floydfoxfb con qualche formattazione del codice.
For( i = startcol, i <= endcol, i++,
data_col = Column( i ) << get name;
new_col_name = "%CFB " || data_col;
Eval(
Eval Expr(
dt << New Column( Expr(new_col_name),
Numeric,
Continuous,
Formula( ((Column( dt, Expr( data_col ) )[] - :column 3) / :column 3) * 100 )
)
)
);
);
Un'altra soluzione alternativa all'ambito delle variabili sarebbe quella di utilizzare Imposta ogni valore (equazione) invece di Formula (equazione).Ciò ha il vantaggio di utilizzare meno risorse poiché una formula non viene calcolata, ma presenta lo svantaggio di una perdita nel modificare detta formula.
Come per qualsiasi cosa buona, ci sono molti modi per affrontare un problema utilizzando gli strumenti giusti.Come hai già detto, Substitute() è un'ottima opzione anche quando le cose iniziano a diventare più avanzate.Substitute è particolarmente utile in combinazione con Parse() che trasforma le stringhe in codice JSL e Eval() che consente quindi l'esecuzione di JSL, questo porta alle istruzioni Eval(Parse(Substitute())).Questa tecnica finale è particolarmente utile quando si raggruppano funzionalità attorno alle piattaforme JMP integrate.Per illustrare ulteriormente la combinazione di parse() e eval(parse) ho incluso un semplice esempio.

Buona programmazione!
Ri: Come utilizzare i valori delle colonne come input per una formula in uno script?Ciao,
In questo esempio la variabile data_col appare ancora nella formula.Poiché stai assegnando data_col in un ciclo For, qualsiasi tentativo di valutare le formule al termine del ciclo produrrà gli stessi valori in tutte e tre le nuove colonne.Questo perché data_col rappresenterà l'ultimo valore del ciclo For, "Colonna 5".Inoltre, supponiamo di salvare la tabella e quindi di chiudere JMP.Quando si apre nuovamente la tabella in una nuova istanza di JMP e si tenta di valutare la formula, verrà visualizzato un errore perché JMP non sa più cosa dovrebbe rappresentare data_col.
Quando si utilizza una variabile in una formula, sarà necessario fare qualcosa per indicare a JMP di sostituire la variabile con il suo valore prima di valutare la formula.Puoi usare Substitute(), ma trovo che il metodo Eval Expr() (as vince.faller0 menzionato) è più facile da implementare per la maggior parte delle persone.Eval Expr() indica a JMP di valutare (sostituire) qualsiasi variabile racchiusa in una funzione Expr() all'interno dell'espressione fornita come argomento. Una Eval() esterna farà sì che JMP valuti l'intera istruzione Nuova colonna dopo che è avvenuta la sostituzione.Nota sull'utilizzo di JMP 41824 dimostra anche questo concetto.
Spero che aiuti.
Wendy
Ri: Come utilizzare i valori delle colonne come input per una formula in uno script?Vinci,
Grazie per questo.Francamente dovrò leggere un po' l'espressione che hai fornito, ma apprezzo la tua comprensione del motivo per cui il mio codice non ha funzionato.
Saluti
Floyd
Ri: Come utilizzare i valori delle colonne come input per una formula in uno script?Nate,
Grazie, questo codice funziona e ha l'ulteriore vantaggio di poter comprendere la logica dietro il codice.
Floyd
Ri: Come utilizzare i valori delle colonne come input per una formula in uno script?vince.faller0 ha infatti individuato con precisione la radice del problema.Non esiste alcuna colonna denominata data_col nella tabella dati.Quindi il codice così come è scritto si riferisce a qualcosa che non esiste.Inoltre, Vince mostra alcuni dei modi più efficaci per utilizzare JSL per scrivere il codice per contenere riferimenti dinamici.Detto questo, in ogni buon linguaggio avrai più opzioni per eseguire la logica.
Suggerirei di utilizzare un formato alternativo per fare riferimento alla colonna.Mentre il formato semplice consiste nell'utilizzare il punto e virgola e il nome della colonna per fare riferimento alle colonne della tabella dati corrente, un modo più potente consiste nell'utilizzare il formato colonna (riferimento tabella dati, stringa di colonna o numero).Di seguito ho modificato leggermente il tuo codice per utilizzare quel formato.
dt = Current Data Table();
startcol = 3;
endcol = 5;
For( i = startcol, i <= endcol, i++,
data_col = Column( i ) << get name;
col_name = "%CFB " || data_col;
dt << New Column(col_name,
Numeric,
Continuous,
Formula( ((column(dt, data_col)[] - :column 3) / :column 3) * 100 ) );
);
Ri: Come utilizzare i valori delle colonne come input per una formula in uno script?Non puoi fare :variable (specialmente di una stringa, che è ciò che ti darà <
Se lo cambi in
data_col = Column( i ) ;
Eval(EvalExpr(New column ("%CFB " || Expr(data_col<<GET name=""></GET>
dovrebbe funzionare.
Sostituisce semplicemente tutti gli Expr() all'interno di EvalExpr() con i loro valori effettivi anziché con le variabili.