JSL: creazione di una formula utilizzando un nome di colonna variabileCIAO,
Voglio fare una cosa davvero semplice (almeno così pensavo), ovvero creare una nuova colonna utilizzando JSL con una formula che contenga un nome di colonna variabile. Ho già provato diverse combinazioni dei comandi "colonna, come colonna, nome, come nome, eval, parse .." e ho cercato nel forum, ma tutto ciò che ho provato risulta in un errore secondo cui la formula non può essere valutata.
Un esempio di cosa voglio fare:
"colonna 1" è una colonna nella mia tabella dati.
a = "column 1";
new column("test", formula(a*2));
La colonna "test" dovrebbe contenere la formula che moltiplica "colonna 1" per 2.
Grazie per qualsiasi aiuto,
Dala
Ri: JSL: creazione di una formula utilizzando un nome di colonna variabileDopo aver tentato di trovare una soluzione funzionante, alla fine ho rinunciato e ho chiesto al supporto di JMP come procedere. Wendy mi ha gentilmente mostrato le linee chiave e le ho inserite in un ciclo for come demo. Il codice che includo presuppone che la tabella dati corrente abbia 2 colonne denominate abc e def che contengono alcune righe di dati a tua scelta. A proposito, esiste un nuovo libro della SAS Press chiamato Jump into JMP Scripting di Wendy Murphrey e Rosemary Lucas che è un libro molto utile sullo scripting. Copre Expr ed Eval Expr utilizzati nell'esempio.
dt = Current Data Table();
cols = {abc, def};
nlist = N Items(cols);
For( i = 1, i <= nlist, i++,
newColExpr = Expr(
dt << New Column( char(cols[i])||"*2", Numeric, Formula( Expr( cols[i] ) * 2 ) )
);
Eval( Eval Expr( newColExpr ) );
)Re: JSL: Creazione di una formula utilizzando un nome di colonna variabileA volte le cose più semplici possono essere sconcertanti in JSL 
Ecco un paio di approcci:
new column("test",formula( as column("column 1")*2 ));
O
a = "column 1";
new column("test",formula( a[]*2 ));
La logica della sintassi è più o meno questa. Nel primo esempio vogliamo trattare "colonna 1" come una colonna di numeri. Nel secondo esempio, "[]" indica che a è un array di numeri.
Spero che questo aiuti
Re: JSL: Creazione di una formula utilizzando un nome di colonna variabileGrazie per la risposta, ma purtroppo non è d'aiuto.
Il primo approccio non è quello che volevo perché ho bisogno di estrarre il nome della colonna da una variabile (può cambiare).
Il secondo approccio non funziona, perché JMP non inserisce il nome effettivo della colonna nella formula. Se accedi alla finestra di dialogo per modificare la formula, nel tuo suggerimento compare "a[Empty()] * 2", e a me serve qualcosa come ":Column1 * 2".
Altri suggerimenti?Re: JSL: Creazione di una formula utilizzando un nome di colonna variabilePenso che il mio secondo esempio avrebbe dovuto suonare così:
a = Column("column 1");
new column("test",formula( a[]*2 ));
Re: JSL: Creazione di una formula utilizzando un nome di colonna variabile@mpb: Funziona benissimo! Grazie per averlo scoperto e per il consiglio sul libro!Re: JSL: Creazione di una formula utilizzando un nome di colonna variabileGrazie, funziona!Re: JSL: Creazione di una formula utilizzando un nome di colonna variabileHo ancora una domanda:
Quello che voglio fare alla fine è creare una nuova colonna per ogni elemento di un elenco. Nella soluzione di Stig, la formula della colonna dipende ancora dalla variabile "a[]" e non (come preferirei) dal nome della colonna "Colonna 1", quindi non mi è consentito modificare "a[]" nello script seguente senza modificare anche i valori calcolati della colonna. Ciò significa che il mio approccio seguente non funziona (la lunghezza di collist e i nomi delle colonne possono cambiare, quindi ho bisogno di un ciclo):
collist = {"column 1", "column 2"};
for (k=1, k<=length(collist), k++,
a = Column(collist);
new column(concat("test",char(k)), formula( a[]*2 ));
);
Anche l'inserimento diretto di un elemento di elenco nell'istruzione formula() non funziona. Qualcuno ha qualche altro suggerimento?
Dala
Re: JSL: Creazione di una formula utilizzando un nome di colonna variabileSe utilizzo il seguente codice:
dt = Current Data Table();
a = Column("height");
dt << New Column("test1",formula(a[]*2));
a = Column("weight");
dt << New Column("test2",formula(a[]*2));
Entrambe le colonne test1 e test2 vengono calcolate correttamente, anche se la formula per entrambe fa riferimento alla stessa variabile a. Quindi, in linea di principio, non dovresti avere problemi con il codice all'interno di un ciclo. Tuttavia, questo approccio non funziona se si desidera che le nuove colonne mantengano il loro comportamento nella tabella come colonne calcolate, il che lascia aperta la questione di come generare dal codice una colonna con la formula ":column 1 * 2"...
Re: JSL: Creazione di una formula utilizzando un nome di colonna variabileOh, vedo solo ora che il mio post precedente non è stato visualizzato completamente... Scusate.
Sì, ho bisogno che le colonne mantengano il loro comportamento o almeno i valori. Ecco perché ho avuto l'idea di rimuovere le formule subito dopo averle calcolate. Ma ho avuto il problema di non trovare un'istruzione che facesse la stessa cosa di "Formula... -> Cancella", ovvero rimuovere la formula e mantenere i valori così come sono. Qualcuno sa come funziona?
Non sarebbe la soluzione più bella, ma per il momento mi basta.Re: JSL: Creazione di una formula utilizzando un nome di colonna variabileOra ho trovato una soluzione alternativa per leggere i valori dalla colonna in un vettore e scrivere i valori calcolati in una nuova colonna.
Ma sono ancora interessato alle risposte alle domande aperte.
Dala