在列公式中声明变量你好,
在列公式中声明变量是好的做法吗?还是这会产生错误风险?我的公式运行良好,但我担心它可能不可靠。
rownum = Row();
If( :Measurement type == "STUDY_VARIABLE",
:Control means[Min(
Current Data Table() << get rows where( :Measurement type == "STUDY_CONTROL" & :Control group == :Control group[rownum] )
)],
:Control means
);
设置如下:
- :测量类型是将每行标记为 STUDY_CONTROL 或 STUDY_VARIABLE 的列
- :Control 组是使用标签(仅一个字母)将 STUDY_VARIABLES 行与相关 STUDY_CONTROL 行的相应平均值(:Control 平均值)关联的列
- :Control group[Row()] 不起作用,因此我预先指定了 rownum 变量
这是一个优雅的解决方案还是一个危险的黑客攻击?
第二个问题是,编辑器警告我,在公式中使用 Current Data Table() 很危险 - 有没有更好的选择?
非常感谢您的帮助 - 这是我的第一个问题!
大卫
回复:在列公式中声明变量欢迎加入俱乐部!
:)
关于您对“当前数据表()”的问题,这里是Scripters Club Recording:构建健壮且故障安全的脚本中共享脚本的屏幕截图:

将表格存储在变量中并在脚本中使用该变量。在屏幕截图示例中,该变量为“dt”。
回复:在列公式中声明变量确实是一场关于 JSL 脚本的精彩讲座!
这 1 小时可以让你免去数月的头痛 : )
对于您的问题,请查看Col Min(...) 。
它将为您完成所有工作:
不需要声明任何 rownum - 不需要访问当前数据表,也不需要获取行 where()
:)

Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Column( "Measurement type",
Character,
Formula(
Map Value(
:sex,
{"F", "STUDY_VARIABLE", "M", "STUDY_CONTROL"}
)
)
);
:weight << Set Name( "Control means" );
:age << Set Name( "Control_Group" );
// ^^^^^^^^prepare table
// vvvvvvvv how to use Col Min()
New Column( "myCol",
Formula(
If( :Measurement type == "STUDY_VARIABLE",
Col Minimum(
If( :Measurement type == "STUDY_CONTROL",
:Control means,
Empty()
),
:Control_Group
),
:Control means
)
)
)