Dies wurde dem JMP-Support bereits gemeldet und als Fehler an die Entwicklung weitergeleitet (00049239). Scheint zumindest bei JMP16.2 und JMP17.0 zu passieren
Nur als Hinweis: Es gibt einen ziemlich schlimmen Fehler in JMP, wenn die genannte Kombination verwendet wird (jeden Wert festlegen, Schleifen- und Spaltenstatistikfunktionen). Was passiert, ist, dass JMP beim Hinzufügen von Daten zu einer anderen Tabelle Daten aus einer falschen Tabelle verwendet. Eine Problemumgehung besteht darin, Tabellenpräferenzen innerhalb von << Set Each Value (<< Set Each Value(Col Rank(Row(), dt:name))) bereitzustellen.
Sie scheinen zu benötigen (basierend auf meinen ziemlich schnellen Tests):
- Datentabellen mit denselben Spaltennamen
- Machen Sie eine Schleife darüber
- Verwenden Sie << Set Each Value, um Werte in der Spalte festzulegen
- Die verwendete Formel sollte die statistische Funktion Col verwenden MIT byVar (und höchstwahrscheinlich muss dies in beiden Tabellen denselben Namen haben)
Nachfolgend finden Sie einige Testfälle
Names Default To Here(1);
// https://www.jmp.com/support/help/en/17.0/#page/jmp/scoping-operators.shtml#
// Initialize data
test_tables = {};
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt << New Column("REAL NAME RANK", Numeric, Continuous, Formula(Col Rank(Row(), :NAME)));
Column(dt, "age") << Set Modeling Type("Continuous");
Insert Into(test_tables, dt);
dt = Open("$SAMPLE_DATA/Students1.jmp");
dt << Sort(By(:name), Replace Table, Order(Ascending)); // sort to create worse scenario
dt << New Column("REAL NAME RANK", Numeric, Continuous, Formula(Col Rank(Row(), :NAME)));
Column(dt, "age") << Set Modeling Type("Continuous");
Insert Into(test_tables, dt);
/*
dt = Open("$SAMPLE_DATA/Students2.jmp");
dt << Sort(By(:name), Replace Table, Order(Ascending)); // sort to create worse scenario
dt << New Column("REAL NAME RANK", Numeric, Continuous, Formula(Col Rank(Row(), :NAME)));
Column(dt, "age") << Set Modeling Type("Continuous");
Insert Into(test_tables, dt);
*/
// use idx 1 to skip first table
min_idx = 0;
// without reversing we will run out of index as we are using wrong table
// but if we reverse we will get worse outcome (in my opinion) as we end up with wrong data
reverse_tableorder = 0;
If(reverse_tableorder,
test_tables = Reverse(test_tables);
);
For Each({dt, idx}, test_tables,
// works
// dt << New Column("COPY", Character, Nominal, << Set Each Value(:NAME));
// dt << New Column("MULTI", Numeric, Continuous, << Set Each Value(:age * :age));
If(idx > 0, // if the column isn't created to first table seems to work fine?
// Doesn't work (// old table used due to some col function optimizations when using byVar?)
Try(
dt << New Column("RANK", Numeric, Continuous, << Set Each Value(Col Rank(Row(), :NAME)));
,
show(exception_msg);
);
Try(
new_col = dt << New Column("RANK_SEPARATE", Numeric, Continuous);
new_col << Set Each Value(Col Rank(:Row(), :name));
,
show(exception_msg);
);
Try(
new_col = dt << New Column("SUM", Numeric, Continuous, << Set Each Value(Col Sum(1)));
,
show(exception_msg);
);
Try(
new_col = dt << New Column("SUM_WITH_GROUP", Numeric, Continuous, << Set Each Value(Col Sum(1, :name)));
,
show(exception_msg);
);
Try( // with reverse_tableorder = 1, :age is taken from correct table BUT the group sizes from wrong?
// KATIE -> 72 (6*12) and not 11+12+12+13+14+15 -> 77
new_col = dt << New Column("SUM_OF_COL", Numeric, Continuous);
new_col << Set Each Value(Col Sum(:age, :name));
,
show(exception_msg);
);
// workaround
dt << New Column("RANK_WITH_REF", Numeric, Continuous, << Set Each Value(
Col Rank(Row(), dt:NAME)
));
);
);Ich habe vom JMP-Support einige gute, aber nicht so gute Informationen erhalten.
Gut:
Dies ist ein Fehler in der Col Rank-Funktion (ich bin mir nicht sicher, ob andere Col-Funktionen getestet wurden) und wird irgendwann behoben (für JMP17.2 wird es keinen Fix geben).
Definitiv nicht so gut:
<< Set Each Value sollte nicht zum Festlegen von Werten für Spalten verwendet werden, es sei denn, es handelt sich um eine Konstante oder eine „globale Funktion“ (today()) und das erste Argument in Col-Statistikfunktionen sollte immer eine Spaltenreferenz sein. Bei den aktuellen Verhaltensweisen handelt es sich nicht um Fehler, sondern um unbeabsichtigte Verhaltensweisen. Sie können daher jederzeit und ohne vorherige Information geändert werden. Ich werde einen Wunschlisteneintrag erstellen, damit diese zu unterstützten Verhaltensweisen und nicht zu unbeabsichtigten Verhaltensweisen werden.
Bearbeiten: Sorgen Sie dafür, dass die Verwendung von Formelausdrücken in „Jeden Wert festlegen“ und die Verwendung von Ausdrücken als erstes Argument in Col-Statistikformeln das unterstützte Verhalten unterstützt
Spaltenstatistik mit der strikten Anforderung, eine Spalte als erstes Argument zu verwenden – verboten, einen Ausdruck zu verwenden?
Das wird ein großer Rückschritt sein!
Viele der schönen Tricks von @brady_brady wird nicht mehr funktionieren 
mit JMP18: super, scheint behoben zu sein:

aber Col Sums scheint immer noch ein Problem zu haben ...

Dieses Problem kann behoben werden, indem explizit auf dataTable:column verwiesen wird, analog zu Jarmos Beispiel im ersten Beitrag:
new_col = dt << New Column("SUM_WITH_GROUP", Numeric, Continuous, << Set Each Value(Col Sum(1, dt:name))); // dt:name instead of name
new_col << Set Each Value(Col Sum(dt:age, dt:name)); // dt:age(name) instead of :age(name)