我對變數感到困惑我在弄清楚局部變數如何運作時遇到了概念問題。我將簡化問題,並專注於令我困惑的問題。
我創建一個局部變量,例如 t0,其值為 5。然後我編寫一個列公式將該值增加 1...t0=t0+1 或 t0+=1(這似乎並不重要),我預期的結果是,當JMP 評估列中的每個單元格時,它會遞增變量,因此當我向下移動列時,我會得到6、7、8 等。相反,我得到一列 6。所以公式並沒有增加變數。
有人可以向我解釋一下我對 JMP 如何處理局部變數的不理解之處嗎?另外,由於我的方法不起作用,是否還有另一種方法來增加變數?我可以用 Lag 來做到這一點,但對於如此簡單的事情來說,這似乎不必要地複雜。
另外,我不清楚局部變數、表變數和參數之間的差異。
預先感謝您提供的所有幫助。
自動化和腳本編寫回覆:我對變數感到困惑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.
回覆:我對變數感到困惑我猜您寫了類似以下內容的列公式:
Local({t0 = 5}, t0 = t0 + 1)
並且您期望初始分配
t0 = 5
僅當資料表從上到下逐個單元格評估列時發生一次。
你已經看到這並沒有發生。您看到的是每次計算單元格時都會發生分配。如果您有 SAS 程式設計經驗,您可能正在尋找類似 SAS 中的 RETAIN 語句的內容。我不知道 JMP 的腳本語言中存在這樣的東西。
但我也有類似的需要進行計算,需要檢索先前計算中的結果。
如果結果是中間的和暫時的,我會將結果儲存在單獨的列中。如果結果只是同一列中前一個儲存格中的值,我將只引用前一個儲存格。無論哪種方式,您可能需要使用@ErraticAttack提到的 Row() 函數。
我附上一個例子來說明。