在列方程中使用数值对象我需要能够获取一个在迭代函数中递增或递减的数值对象,并将其用于列公式中。在下面的等式中,col、l 和 m 的值需要在列公式中进行求值。我该如何实现这一点?Parse()、Eval() 和 Num() 函数无法正常工作。
For( i = 1, i <=8, i++,
col = 11+i;
l = col - i;
m = col + 1 - i;
colno = Char(col);
New Column("Column "||colno, Character, "Nominal", Formula(If(Row() == 12, Lag(Column(1), l), If(Row() == 13, Lag(Column(2), m), Lag(Column(col, 1)))))));
自动化和脚本回复:在列方程中使用数字对象这似乎有效。Eval(Eval Expr(....)) 在创建列之前评估表达式。
For( i = 1, i <= 8, i++,
col = 11 + i;
l = col - i;
m = col + 1 - i;
colno = Char( col );
Eval(
Eval Expr(
New Column( "Column " || Expr( colno ),
Character,
"Nominal",
Formula(
If( Row() == 12,
Lag( Column( 1 ), Expr( l ) ),
If( Row() == 13,
Lag( Column( 2 ), Expr( m ) ),
Lag( Column( Expr( col ), 1 ) )
)
)
)
)
)
);
);
回复:在列方程中使用数字对象Column( col, 1 )
?

回复:在列方程中使用数字对象在新列消息之外定义的任何变量都不应在新列()消息中使用。
在我的公司,我们有一个自动检查功能,可以在执行代码之前检测此类编程问题。
如果检测到潜在错误,则会向用户显示警告消息并提供一些建议。
回复:JMP 中的表达式处理:Tipps 和 Trapdoors
For( i = 1, i <= 8, i++,
col = 11 + i;<BR />
l = col - i;
m = col + 1 - i;
colno = Char( col );
Eval(Eval Expr(New Column( "Column " || colno,
Character,
"Nominal",
Formula(
If( Row() == 12,
Lag( Column( 1 ), Expr(l) ),
If( Row() == 13,
Lag( Column( 2 ), Expr(m) ),
Lag( Expr(Name Expr(As Column( col))), 1 )
)
)
)))
);
);
哎哟!因为柱子不理解数字……
回复:在列方程中使用数字对象For( i = 1, i <= 8, i++,
col = 11 + i;
colname = Column(col) << get name;
l = col - i;
m = col + 1 - i;
colno = Char( col );
Eval(Eval Expr(New Column( "Column " || colno,
Character,
"Nominal",
Formula(
If( Row() == 12,
Lag( Column( 1 ), Expr(l) ),
If( Row() == 13,
Lag( Column( 2 ), Expr(m) ),
Lag( Expr(Name Expr(As Column( colname))), 1 )
)
)
)))
);
);
回复:在列方程中使用数字对象好球。
回复:在列方程中使用数字对象@hogi
我从mmarchandFSLR脚本中获取了一个修改版本(如下所示),运行良好,非常棒的补充。我不确定我是否理解了您的疑问,请解释一下?
dt = Current Data Table();
Delete Symbols();
dt = Current Data Table();
For( i = 1, i <= 8, i++,
c = 11 + i;
l = 12 - i;
m = 13 - i;
colno = Char( c );
Eval(Eval Expr(New Column( "Column " || colno,
Character,
"Nominal",
Formula(
If( Row() == 12,
Lag( As Column( 1 ), Expr(l) ),
If( Row() == 13,
Lag( As Column( 2 ), Expr(m) ),
Lag( As Column( Expr(c)) , 1)
)
)
)))
);
);
回复:在列方程中使用数字对象首先,让我吃惊的是,即使在纠正了周围的细节之后
Column( col, 1 )
@mmarchandFSLR的解决方案似乎不起作用。
落后()期望的是 As Column() ,而不是柱子() ?!??!
这破坏了我关于使用作为列()访问当前行的值的所有“知识”!
关于作为列(col)而不是Name Expr(As column(col)):
它确实有效,但它在以下情况下很“脆弱”:
- 添加一列(数字不会更新!)
- 更改了条目(在我的系统上,公式列的条目没有更新?!?)
[如果重启后情况好转,我会删除此帖]
回复:在列方程中使用数字对象似乎值得记录:
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
New Column( "height 2", Formula( :height ));
New Column( "height 3", Formula( As Column( "height" ) ));
New Column( "height 4", Formula( As Column( 4 ) ));
New Column( "height 5", Formula( Column( 4 )[Empty()] ));
wait(0);
dt[5::10, "height"] = 1;
wait(0);
New window(<< type("modal dialog"), Text Box ("just height 1 got updated ... continue"));
dt << Move Selected Columns( {:height}, after( :name ) );
New window(<< type("modal dialog"), Text Box ("no big difference - now let's recalc"));
dt << rerun formulas();
之前 之后

- 列公式的解释器理解Column(4)和As Column(4)、Column(“height”)等等....
但是,如果输入列发生变化,更新列的机制却不行吗?必须手动触发更新吗?
- 当列移动到另一个位置时,数字不会更新。
我永远不会在列引用中使用数字!
我永远不会使用类似列(“高度”)
有趣的事实:
公式编辑器也不喜欢它:

回复:在列方程中使用数字对象我想我应该描述一下我的黑暗目的。我有一张表格,不知道该做成高表格还是宽表格。第 1 列和第 2 列,第 1-8 行是高表格,第 1-11 列在第 12 行之后变成了宽表格。这个脚本是让表格更合理的第一步。
之前 之后

我采取了一系列进一步的步骤来处理数据,但这是最棘手的部分。