Je suis confus au sujet des variablesJ'ai un problème conceptuel pour comprendre comment fonctionnent les variables locales. Je vais simplifier le problème pour me concentrer sur ce qui me déroute.
Je crée une variable locale, disons t0, avec une valeur de 5. Ensuite j'écris une formule de colonne pour incrémenter cette valeur de 1... soit t0=t0+1 ou t0+=1 (cela ne semble pas avoir d'importance), le résultat auquel je m'attendais était que lorsque JMP évaluait chaque cellule de la colonne, il incrémentait la variable afin d'obtenir 6, 7, 8, etc. au fur et à mesure que je descendais dans la colonne. Au lieu de cela, j'obtiens une colonne de 6. La formule n'incrémente donc pas la variable.
Quelqu'un peut-il m'expliquer ce que je ne comprends pas sur la façon dont JMP gère les variables locales ? De plus, puisque mon approche ne fonctionne pas, existe-t-il un autre moyen d'incrémenter une variable ? Je peux le faire avec Lag mais cela semble inutilement complexe pour quelque chose d'aussi simple.
De plus, je ne comprends pas clairement la distinction entre les variables locales, les variables de table et les paramètres.
Merci d'avance pour toute l'aide apportée.
Automatisation et scriptsRe : Je suis confus au sujet des variablesYou 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.
Re : Je suis confus au sujet des variablesJe suppose que vous avez écrit quelque chose comme ce qui suit sous forme de formule de colonne :
Local({t0 = 5}, t0 = t0 + 1)
Et vous vous attendez à ce que la mission initiale
t0 = 5
ne se produit qu'une seule fois lorsque le tableau de données évalue une colonne, cellule par cellule, de haut en bas.
Vous avez vu que cela n’arrive pas. Ce que vous voyez, c'est que l'affectation se produit à chaque fois qu'une cellule est évaluée. Si vous avez une expérience en programmation SAS, vous recherchez peut-être quelque chose de similaire à l'instruction RETAIN dans SAS. Je ne suis pas au courant qu'une telle chose existe dans le langage de script de JMP.
Mais j’avais le même besoin de faire des calculs qui nécessitaient de récupérer les résultats de calculs précédents.
Si le résultat est intermédiaire et temporaire, je stockerai le résultat dans une colonne séparée. Si le résultat est juste une valeur dans la cellule précédente de la même colonne, je ferai simplement référence à la cellule précédente. Quoi qu'il en soit, vous devrez peut-être utiliser la fonction Row() mentionnée par @ErraticAttack .
Je joins un exemple pour illustrer.