Ich bin verwirrt über VariablenIch habe ein konzeptionelles Problem herauszufinden, wie lokale Variablen funktionieren. Ich werde das Thema vereinfachen, um mich auf das zu konzentrieren, was mich verwirrt.
Ich erstelle eine lokale Variable, sagen wir t0, mit einem Wert von 5. Dann schreibe ich eine Spaltenformel, um diesen Wert um 1 zu erhöhen ... entweder t0=t0+1 oder t0+=1 (es scheint keine Rolle zu spielen), Das Ergebnis, das ich erwartet hatte, war, dass JMP bei der Auswertung jeder Zelle in der Spalte die Variable erhöhen würde, sodass ich 6, 7, 8 usw. erhalte, wenn ich mich in der Spalte nach unten bewege. Stattdessen erhalte ich eine Spalte mit 6ern. Die Formel erhöht die Variable also nicht.
Kann mir jemand erklären, was ich nicht verstehe, wie JMP mit lokalen Variablen umgeht? Gibt es auch eine andere Möglichkeit, eine Variable zu erhöhen, da mein Ansatz nicht funktioniert? Ich kann es mit Lag machen, aber das erscheint mir für etwas so Einfaches unnötig komplex.
Außerdem ist mir die Unterscheidung zwischen lokalen Variablen, Tabellenvariablen und Parametern nicht klar.
Vielen Dank im Voraus für jede Hilfe.
Automatisierung und SkripterstellungBetreff: Ich bin verwirrt über VariablenYou 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.
Betreff: Ich bin verwirrt über VariablenIch vermute, dass Sie als Spaltenformel etwa Folgendes geschrieben haben:
Local({t0 = 5}, t0 = t0 + 1)
Und Sie erwarten, dass die erste Aufgabe
t0 = 5
Tritt nur einmal auf, wenn die Datentabelle eine Spalte Zelle für Zelle von oben nach unten auswertet.
Sie haben gesehen, dass das nicht geschieht. Sie sehen, dass die Zuweisung jedes Mal erfolgt, wenn eine Zelle ausgewertet wird. Wenn Sie SAS-Programmiererfahrung haben, suchen Sie möglicherweise nach etwas Ähnlichem wie der RETAIN-Anweisung in SAS. Mir ist nicht bekannt, dass so etwas in der Skriptsprache von JMP existiert.
Aber ich hatte das gleiche Bedürfnis, Berechnungen durchzuführen, bei denen Ergebnisse aus früheren Berechnungen abgerufen werden mussten.
Wenn das Ergebnis mittelmäßig und vorübergehend ist, speichere ich das Ergebnis in einer separaten Spalte. Wenn das Ergebnis nur ein Wert in der vorherigen Zelle in derselben Spalte ist, verweise ich einfach auf die vorherige Zelle. In jedem Fall müssen Sie möglicherweise die von @ErraticAttack erwähnte Row()-Funktion verwenden.
Zur Veranschaulichung füge ich ein Beispiel bei.