有没有办法提取公式中使用的列?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />大家好-
我正在尝试在我的平台中创建一个新按钮,该按钮将从逐步分析中提取选定的列,然后建立每个选择的单变量分布。 限制在于,所选列的提取和构建分布仅限于列表中的特定列名称。 我希望能够深入到该列中检查它是否是公式,如果是公式则提取使用的任何列,然后转身并将额外的列逐步包含到所选列的列表中。
更具体地说,我可以从公式中提取列吗? 使用“:”部分似乎不会捕获复杂的名称,并且索引仅指获取整个公式。
一个例子是在列表中包含我的“音量”列:
{:体积}
执行column("Volume")<<获取公式;返回:
:高度 * :宽度 * :长度
我想以以下列表结束:
{:高度、:宽度、:长度、:体积}
这是一个简单的公式示例,还有其他具有简单或复杂名称的版本/类型......
谢谢,
安德鲁·帕克
回复:有没有办法提取公式中使用的列?我认为这是对上面 Craige@JMP 条目的合理解释,Andrew。
但请注意,上面的示例表明您只需要保留列表中的不同项目(因此“W”仅出现一次)。 您可以将此逻辑放入 Craige 的函数中,或者只是操作他的函数返回的列表。
回复:有没有办法提取公式中使用的列?谢谢! 这绝对是我完成我的程序所需要的。
为了检查我对公式的理解,如果我使用公式生成器可视化发生的情况:

它看着主框并询问“公式是什么?”以及“需要多少件?”它会查看每个部分并重复问题,直到它遇到一个内部只有叶子的盒子,并返回作为列名的叶子的字符串。 一旦实现了最小的叶盒,它就开始退出并查看在通往第一个叶盒的路径上未检查的节点/叶...
描述不是很雄辩,但这听起来正确吗?
回复:有没有办法提取公式中使用的列?不错的代码! 非常感谢。
回复:有没有办法提取公式中使用的列?Ian - 递归版本这里
回复:有没有办法提取公式中使用的列?执行此操作的最佳方法是将公式表达式递归标记为树,然后扫描叶节点以获取列引用。 在 JSL 中使用提供的表达式操作基元完全可以实现这一点(请参阅《JMP 脚本指南》中的“列表和表达式”部分,注意“Head()”、“NArg()”和“Arg()”函数)。 但您可能需要翻出一本计算机科学书籍来编写此方法。
或者,下面的代码提供了一种让 JMP 为您完成工作的笨拙方法(使用分析器):
名称默认到这里( 1 ) ;
dt =新表( “获取公式中的列” ,
添加行( 20 ) ,
新专栏( “H” ,
数字,
“连续的” ,
格式( “最好的” , 12 ) ,
公式(随机制服() )
) ,
新专栏( “W” ,
数字,
“连续的” ,
格式( “最好的” , 12 ) ,
公式(随机制服() )
) ,
新专栏( “D” ,
数字,
“连续的” ,
格式( “最好的” , 12 ) ,
公式(随机制服() )
) ,
新专栏( “V” ,
数字,
“连续的” ,
格式( “最好的” , 12 ) ,
公式( ( :瓦* : H * : D ) / 10 )
)
) ;
// 不可见地启动 Profiler
p = dt <<分析器(是( : V ) ,扩张,无形的) ;
// 获取网格表
p <<输出网格表;
// 将网格表中的列放入列表中
列=数据表(表格()) <<获取列名( “细绳” ) ;
// 清理
p <<关闭窗口;
关闭(数据表(表格()) ,不保存) ;