<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />嗨,我想快速输入具有相同整体公式但不同变量的多个列。
我已经尝试了以下但很明显,我没有使用正确的语法来调用新列函数中的公式项:
名称默认为此处 (1);
dt = 当前数据表();
cc = N col (dt); // 保留原来的列号
对于 (i=9,i<= cc, i = i+2,
新列(“Delta” || 列名 (i+1),
数字,
连续的,
公式 (:Column Name(i+1) - :Column Name (i)) // 语法问题
);
);
感谢您的帮助。
真挚地。
EvalExpr 不执行 eval,因为您通常需要表达式以便继续处理它。在这种情况下,别无他法。
evalexpr(3+4+expr(5+6))
3 + 4 + 11
JMP 具有强大的表达式操作功能,可对表达式进行操作。这是一个例子; arg、head、substituteinto 是其他可以处理表达式的函数。
内省
列表和表达式
嗨,克雷格,
感谢您向我发送正确的代码:我自己无法解决这个问题。
关于“Eval”和“Eval Expr”的使用,为什么要把这两个函数结合起来呢? 单独使用“Eval Expr”会成功吗?
感谢您的帮助。
真挚地,
蒂埃里
这个脚本可能会构建一些接近你所追求的东西。New Column 函数的 Formula 参数需要一个完全构建的公式,它在实际运行时需要采用的形式,即在脚本运行之后。下面的 eval( evalexpr( ... expr(...) ... expr(...) ... ) ) 策略是一种满足您需要的方法。expr() 用于标记需要评估的部分。evalexpr() 寻找它们并评估它们。eval() 计算 evalexpr 返回的表达式。请注意,两个 expr() 之间的减号不会在 for 循环内求值,但 names[i+1] 会求值(通过 evalexpr),NewColumn 会求值(通过 eval)。
<
dt = 新表("无标题",
添加行( 1 ),
新列(“a”,数字,“连续”,格式(“最佳”,12),设置值([1])),
新列(“b”,数字,“连续”,格式(“最佳”,12),设置值([2])),
新列(“c”,数字,“连续”,格式(“最佳”,12),设置值([4])),
新列(“d”,数字,“连续”,格式(“最佳”,12),设置值([8])),
新列(“e”,数字,“连续”,格式(“最佳”,12),设置值([16])),
新列(“f”,数字,“连续”,格式(“最佳”,12),设置值([32]))
);
cc = N col (dt);
名称=dt<
对于(我= 1,我<= cc,我=我+ 2,
Eval( // 评估...返回的表达式
Eval Expr( // 评估嵌入的表达式...
New Column( "Delta " || char(names[ i + 1 ]), // 将列转换为字符串
数字的,连续的,
// 公式不会自行计算。这种情况需要两个表达式
公式( Expr( 名字[ i + 1 ] ) - Expr( 名字[ i ] ) )
)
)
)
);
/* ----- 生成的脚本 ------------------
新表(“无标题”,
添加行( 1 ),
新列(“a”,数字,“连续”,格式(“最佳”,12),设置值([1])),
新列(“b”,数字,“连续”,格式(“最佳”,12),设置值([2])),
新列(“c”,数字,“连续”,格式(“最佳”,12),设置值([4])),
新列(“d”,数字,“连续”,格式(“最佳”,12),设置值([8])),
新列(“e”,数字,“连续”,格式(“最佳”,12),设置值([16])),
新列(“f”,数字,“连续”,格式(“最佳”,12),设置值([32])),
新列(“Delta b”,数字,“连续”,格式(“最佳”,10),公式(:p - :A ) ),
新列(“Delta d”,数字,“连续”,格式(“最佳”,10),公式(:d - :c)),
新列(“Delta f”,数字,“连续”,格式(“最佳”,10),公式(:f - :e))
)
*/
