Sono confuso riguardo alle variabiliSto riscontrando un problema concettuale per capire come funzionano le variabili locali. Semplificherò la questione per concentrarmi su ciò che mi confonde.
Creo una variabile locale, diciamo t0, con un valore di 5. Quindi scrivo una formula di colonna per incrementare questo valore di 1... t0=t0+1 o t0+=1 (non sembra avere importanza), il risultato che mi aspettavo era che quando JMP valutava ciascuna cella nella colonna, incrementava la variabile in modo da ottenere 6, 7, 8, ecc. mentre mi spostavo lungo la colonna. Invece, ottengo una colonna di 6. Quindi la formula non incrementa la variabile.
Qualcuno può spiegarmi cosa non capisco su come JMP gestisce le variabili locali? Inoltre, poiché il mio approccio non funziona, esiste un altro modo per incrementare una variabile? Posso farlo con Lag ma sembra inutilmente complesso per qualcosa di così semplice.
Inoltre, non mi è chiara la distinzione tra variabili locali, variabili di tabella e parametri.
Grazie in anticipo per tutto l'aiuto fornito.
Automazione e scriptingRi: Sono confuso riguardo alle variabiliYou might be interested in the Row() function inside of a column formula -- it returns the current row that the formula is being run against. As for variables and scoping -- it is usually best to be explicit about variable scopes. Thus to use a global counter, do ::t0 += 1 -- the double colon explicitly scopes the name to the global namespace. If you want a local name, explicitly scope it, i.e., local:t0 There is also the Here namespace, and again it is best to be explicit in scoping. I recommend being explicit as JMP is buggy and will not always adhere to the stated scoping rules.
Ri: Sono confuso riguardo alle variabiliImmagino che tu abbia scritto qualcosa di simile alla seguente come formula di colonna:
Local({t0 = 5}, t0 = t0 + 1)
E ti aspetti che l'incarico iniziale
t0 = 5
si verifica solo una volta quando la tabella dati valuta una colonna, cella per cella dall'alto verso il basso.
Hai visto che non sta succedendo. Quello che vedi è che l'assegnazione avviene ogni volta che viene valutata una cella. Se hai esperienza di programmazione SAS, potresti cercare qualcosa di simile all'istruzione RETAIN in SAS. Non sono a conoscenza dell'esistenza di una cosa del genere nel linguaggio di scripting di JMP.
Ma avevo la necessità simile di eseguire calcoli che necessitano di recuperare risultati nei calcoli precedenti.
Se il risultato è intermedio e temporaneo, memorizzerò il risultato in una colonna separata. Se il risultato è solo un valore nella cella precedente nella stessa colonna, mi riferirò semplicemente alla cella precedente. In ogni caso, potrebbe essere necessario utilizzare la funzione Row() menzionata da @ErraticAttack .
Allego un esempio per illustrare.