Cela a déjà été signalé au support JMP et ils l'ont soumis en tant que bogue au développement (00049239). Semble se produire au moins avec JMP16.2 et JMP17.0
Juste comme un avertissement, il y a un bogue assez grave avec JMP lors de l'utilisation de la combinaison mentionnée (définir chaque valeur, fonctions statistiques de boucle et col). Ce qui se passe, c'est que JMP utilise les données d'une mauvaise table lors de l'ajout de données à une table différente. Une solution consiste à fournir une préférence de table dans << Set Each Value (<< Set Each Value(Col Rank(Row(), dt:name))).
Vous semblez avoir besoin (sur la base de mes tests assez rapides):
- Tables de données avec le(s) même(s) nom(s) de colonne
- Boucle sur ceux
- Utilisez << Définir chaque valeur pour définir les valeurs dans la colonne
- La formule utilisée doit utiliser la fonction statistique Col AVEC byVar (et très probablement cela doit avoir le même nom dans les deux tables)
Ci-dessous quelques cas de test
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)
));
);
);Vous avez de bonnes informations, pas si bonnes, du support JMP.
Bien:
Il s'agit d'un bogue avec la fonction Col Rank (je ne sais pas si d'autres fonctions Col ont été testées) et sera corrigé à un moment donné (le correctif ne sera pas là pour JMP17.2).
Certainement pas si bon:
<< Set Each Value ne doit pas être utilisé pour définir des valeurs sur des colonnes, sauf s'il s'agit d'une constante ou d'une "fonction globale" (aujourd'hui()) et le premier argument des fonctions statistiques Col doit toujours être une référence de colonne. Les comportements actuels ne sont pas considérés comme des bugs mais plutôt comme des comportements non intentionnels, ils sont donc susceptibles de changer à tout moment sans aucune information. Je vais créer un élément de liste de souhaits afin qu'ils en fassent des comportements pris en charge au lieu de comportements involontaires.
Modifier: Faire en utilisant des expressions de formule dans Set Each Value et en utilisant des expressions comme premier argument dans Col comportement pris en charge par les formules statistiques
Col statistiques avec la stricte obligation d'utiliser une colonne comme premier argument - interdit d'utiliser une expression ?
Ce sera un énorme pas en arrière !
Beaucoup des belles astuces de @brady_brady ne fonctionnera plus 
avec JMP18 : super, ça semble réglé :

mais le colonel Sums semble toujours avoir un problème...

ce problème peut être résolu en faisant explicitement référence à dataTable:column, de manière analogue à l'exemple de Jarmo dans le premier article :
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)