很酷的是,可以在公式编辑器中使用自定义函数以及自定义公式的一部分。
使用 TRansform Category 命令,
New Custom Function( "myNamespace", "Add Ten", Function( {x, y = 10}, x + y ), << Transform Category( "Custom" ));从https://www.jmp.com/support/help/en/16.2/#page/jmp/create-custom-functions-transforms-and-formats.shtml
将显示在右键单击“新建公式列”菜单中 - 并生成一个包含公式的列

我刚开始@tx尼尔森的方法
https://community.jmp.com/t5/Discussions/Formula-for-Number-of-Unique-Categories-in-Column/mp/55284/highlight/true#M31262
生成一列计数唯一值 - 但我不想输入公式,而是想使用自定义函数。
手动生成的公式列有效,但使用自定义函数的列计数唯一没有。
它失败并显示错误消息

似乎 x 在经过()表达式不替换为列名。
所以,使用评估(替换()解决问题?
……但是怎么办呢?
和
Eval(Substitute(Expr(Summarize( values = by( _col_ ) )),Expr(_col_),Name Expr(x) ));
我明白了

- 因为在列公式中 :x 被视为 :x[row()]。 啊啊……
沿着这条线,我开始想知道为什么会这样:

[注意:红色锯齿线只是告诉用户打印在列公式中不是一个好主意]
为什么 Jmp 知道它必须发送获取值到专栏:性别并且不:性别[行()]。
为什么它实际上会返回:性别[行()]在第二行 - 而不是列:性别?
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Add Custom Functions(
New Custom Function(
"custom",
"count unique",
Function( {x},
As Constant( Summarize( values = by( x ) ) );
N Items( values );
),
<<TRANSFORM category=""></TRANSFORM>