이것은 이미 JMP 지원팀에 보고되었으며 개발팀에 버그로 제출했습니다(00049239). 적어도 JMP16.2 및 JMP17.0에서는 발생하는 것 같습니다.
참고로, 언급된 조합(각 값, 루프 및 열 통계 함수 설정)을 사용할 때 JMP에는 상당히 나쁜 버그가 있습니다. JMP는 다른 테이블에 데이터를 추가할 때 잘못된 테이블의 데이터를 사용합니다. 한 가지 해결 방법은 << Set Each Value(<< Set Each Value(Col Rank(Row(), dt:name))) 내에서 테이블 기본 설정을 제공하는 것입니다.
필요한 것 같습니다 (상당히 빠른 테스트를 기반으로).
- 열 이름이 같은 데이터 테이블
- 그것들을 반복
- << 각 값 설정을 사용하여 열의 값을 설정합니다.
- 사용된 수식은 Col 통계 함수를 사용해야 합니다. 와 함께 byVar(대부분 두 테이블에서 동일한 이름을 가져야 함)
아래는 몇 가지 테스트 사례입니다.
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)
));
);
);JMP 지원팀에서 좋은 정보가 아닌 좋은 정보를 얻었습니다.
좋은:
이것은 Col Rank 기능의 버그(다른 Col 기능이 테스트되었는지 확실하지 않음)이며 어느 시점에서 수정될 것입니다(JMP17.2에 대한 수정은 없을 것임).
확실히 좋지 않습니다:
<< 각 값 설정은 상수 또는 '전역 함수'(today())가 아닌 한 열에 값을 설정하는 데 사용해서는 안 되며 Col 통계 함수의 첫 번째 인수는 항상 열 참조여야 합니다. 현재 동작은 버그가 아니라 의도하지 않은 동작으로 간주되므로 아무 정보 없이 언제든지 변경될 수 있습니다. 의도하지 않은 동작 대신 지원되는 동작으로 만들 수 있도록 위시리스트 항목을 만들 것입니다.
편집하다: Set Each Value에서 수식 표현식을 사용하고 Col 통계 수식에서 첫 번째 인수로 표현식을 사용하여 동작을 지원하도록 합니다.
열을 첫 번째 인수로 사용해야 하는 엄격한 요구 사항이 있는 열 통계 - 표현식 사용이 금지되어 있습니까?
이것은 엄청난 후퇴가 될 것입니다!
많은 아름다운 트릭 @brady_brady 더 이상 작동하지 않습니다 
JMP18로: 훌륭합니다. 수정된 것 같습니다.

하지만 콜 섬스는 아직도 문제가 있는 듯하네요...

이 문제는 Jarmo의 첫 번째 게시물의 예와 유사하게 dataTable:column을 명시적으로 참조하면 해결될 수 있습니다.
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)