引用其他表中的列我正在尝试通过读取两个源表来创建一个新表。我想避免将它们加入到一张大表中并从那里进行操作。新表将是两个源表之间的增量数组。该脚本可以很好地创建列,但没有用任何内容填充它们。我假设在我的公式中引用其他表中的列时缺少一些语法。
predt = Open("C:\...\pre_data.jmp");
predtcols = predt << Get Column Names (string);
postdt = Open("C:\...\post_data.jmp");
postdtcols = postdt << Get Column Names (string);
dt = new table ("delta_values");
for (i=1, i <= NCols(predt), i++,
dt << New column ("delta_"||predtcols[i], numeric, continuous, formula(postdt:column(postdtcols[i]) - predt:column(predtcols[i])));
);数据混合和清理回复:引用其他表中的列这很容易检查。 双击 JMP 中的列标题,将打开“列信息”窗口。 它将列出真实的列名称。回复:引用其他表中的列我从 Excel 工作表(我们测试器的输出)导入了列名称,所以我认为它们隐藏在列名称中
回复:引用其他表中的列单位(定义为列属性)不是列名称的一部分。
回复:引用其他表中的列啊。看起来第 2 列之后的所有列的名称中都有一个 (xxx) - 测量单位。可能是这样吗?日志对每一列都会抛出这样的错误
回复:引用其他表中的列我认为这是一个数据问题。该代码对于我的 2 列测试用例运行良好,但它被编写为处理变量“predt”中找到的尽可能多的列
For( i = 1, i <= N Cols( predt ), i++,
因此,您需要做的是单步执行代码并检查变量值并查看发生了什么。如果您的数据没有发布到此讨论中,我不知道发生了什么。
日志中是否显示任何消息?
回复:引用其他表中的列感谢您及时的回复!看来我只能用这个脚本获得前两列的增量。这些列的格式与其余列相同(数字,连续),所以我不确定这里发生了什么。
回复:引用其他表中的列你有几个问题在嘲笑你。
- 您需要<< Add Rows()到空数据表;
- 使用 Column() 函数的格式不是 postdt:column( postcols[i] )。如果这是在这种情况下使用的方法,则形式将是 Column( postdt, postcols[i] )。但这不是这里所需要的
- 在 New Column() 操作中分配公式有点棘手。设置的 Formula() 在成为公式之前不会被评估。也就是说,如果您将 postcols[i] 放入公式中,它在构建公式时不会查找 postcols[i] 的值,它只是将 postcols[i] 放入公式中,然后尝试执行它当公式运行时。问题在于,由于变量“i”在循环中被一遍又一遍地重新分配,因此每次在 JSL 中更改“i”时,引用“i”的每个公式都会发生更改。那不是你想要的。因此,需要做的是在 JSL 中评估您想要的确切代码字符串,然后运行该 JSL 以创建新列。您可以在下面更正后的 JSL 中看到这一点
predt = data table("one");//Open( "C:\...\pre_data.jmp" );
predtcols = predt << Get Column Names( string );
postdt = data table("two");//Open( "C:\...\post_data.jmp" );
postdtcols = postdt << Get Column Names( string );
dt = New Table( "delta_values" );
dt << add rows(nrows(postdt));
For( i = 1, i <= N Cols( predt ), i++,
Eval(
Parse(
"dt << New Column( \!"delta_" || predtcols[i] || "\!",
numeric,
continuous,
formula( postdt:" ||
postdtcols[i] || "[Row()] - predt:" || predtcols[i] || "[Row()]) )'"
)
)
);
dt << delete columns("column 1");