変数について混乱していますローカル変数がどのように機能するかを理解するのに概念的な問題があります。私にとって混乱している点に焦点を当てるために、問題を単純化します。
値が 5 のローカル変数、たとえば t0 を作成します。次に、この値を 1 ずつ増やす列の式を作成します。t0=t0+1 または t0+=1 のいずれか (重要ではないようです)。私が期待していた結果は、JMP が列内の各セルを評価するときに変数をインクリメントし、列を下に移動するにつれて 6、7、8 などを取得するというものでした。代わりに、6 の列が表示されます。したがって、数式は変数をインクリメントしません。
JMP がローカル変数を処理する方法について理解していないことを誰かが説明してもらえますか?また、私のアプローチは機能しないので、変数をインクリメントする別の方法はありますか? Lag を使用することもできますが、非常に単純なものであるため、不必要に複雑に思えます。
また、ローカル変数、テーブル変数、パラメーターの区別も明確ではありません。
ご協力いただきありがとうございました。
自動化とスクリプト作成Re: 変数について混乱していますYou 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: 変数について混乱しています列の式として次のようなものを書いたと思います。
Local({t0 = 5}, t0 = t0 + 1)
そして、最初の割り当てが
t0 = 5
データ テーブルが列をセルごとに上から下に評価するときに 1 回だけ発生します。
それが起こっていないことがわかりました。セルが評価されるたびに割り当てが行われることがわかります。 SAS プログラミングの経験がある場合は、SAS の RETAIN ステートメントに似たものを探しているかもしれません。 JMP のスクリプト言語にそのようなものが存在することは知りません。
しかし、以前の計算の結果を取得する必要がある計算を行う必要も同様にありました。
結果が中間的で一時的なものである場合は、結果を別の列に保存します。結果が同じ列の前のセルの値だけの場合は、前のセルを参照するだけです。いずれにせよ、 @Erratic Attackが言及した Row() 関数を使用する必要がある場合があります。
説明するために例を添付します。