JSL:使用变量列名创建公式你好,
我想做一件实际上简单的事情(至少我是这么认为的),即使用 JSL 和包含变量列名称的公式创建一个新列。 我已经尝试了命令“column、as column、name、as name、eval、parse ..”的几种组合,并且搜索了论坛,但我尝试的所有内容都会导致无法计算公式的错误。
我想做的一个例子:
“第 1 列”是我的数据表中的一列。
a = "column 1";
new column("test", formula(a*2));
“test”列应包含将“column 1”乘以 2 的公式。
谢谢你的帮助,
达赫拉
回复:JSL:使用变量列名称创建公式在尝试提出可行的解决方案后,我最终放弃了,并向 JMP 支持人员询问如何完成此操作。 Wendy 好心地向我展示了关键行,我将它们嵌入到 for 循环中作为演示。我包含的代码假设当前数据表有 2 个名为 abc 和 def 的列,其中包含您选择的几行数据。顺便说一句,SAS Press 有一本新书,名为 Jump into JMP Scripting,作者是 Wendy Murphrey 和 Rosemary Lucas,这是一本关于脚本编写的非常有用的书。它确实涵盖了示例中使用的 Expr 和 Eval Expr。
dt = Current Data Table();
cols = {abc, def};
nlist = N Items(cols);
For( i = 1, i <= nlist, i++,
newColExpr = Expr(
dt << New Column( char(cols[i])||"*2", Numeric, Formula( Expr( cols[i] ) * 2 ) )
);
Eval( Eval Expr( newColExpr ) );
)回复:JSL:使用变量列名创建公式有时最简单的事情在 JSL 中也会令人难以置信:)
以下是几种方法:
new column("test",formula( as column("column 1")*2 ));
或者
a = "column 1";
new column("test",formula( a[]*2 ));
语法逻辑大致如下。在第一个例子中,我们希望将“第 1 列”视为一列数字。在第二个例子中,“[]”表示 a 是一个数字数组。
希望这有帮助
回复:JSL:使用变量列名创建公式谢谢您的回答,但不幸的是它没有帮助。
第一种方法不是我想要的,因为我需要从变量中取出列名(它可以改变)。
第二种方法行不通,因为 JMP 不会将真实的列名插入公式中。如果你进入更改公式的对话框,它会根据你的建议显示“a[Empty()] * 2”,而我需要的是类似“:Column1 * 2”这样的格式。
还有其他建议吗?回复:JSL:使用变量列名创建公式我认为我的第二个例子应该是这样的:
a = Column("column 1");
new column("test",formula( a[]*2 ));
回复:JSL:使用变量列名创建公式@mpb:效果很好!谢谢你发现并分享了这本书的技巧!回复:JSL:使用变量列名创建公式谢谢,有效!回复:JSL:使用变量列名创建公式我还有一个问题:
我最终想要做的是为列表中的每个项目创建一个新列。在 Stig 的解决方案中,列公式仍然依赖于变量“a[]”,而不是(我更喜欢)依赖于列名“Column 1”,因此,在以下脚本中,如果不更改计算出的列值,我就无法更改“a[]”。这意味着我的以下方法不起作用(collist 的长度和列名可能会发生变化,所以我需要一个循环):
collist = {"column 1", "column 2"};
for (k=1, k<=length(collist), k++,
a = Column(collist);
new column(concat("test",char(k)), formula( a[]*2 ));
);
直接在 formula() 语句中插入列表元素也不起作用。还有其他建议吗?
达赫拉
回复:JSL:使用变量列名创建公式如果我使用以下代码:
dt = Current Data Table();
a = Column("height");
dt << New Column("test1",formula(a[]*2));
a = Column("weight");
dt << New Column("test2",formula(a[]*2));
即使 test1 和 test2 的公式引用了同一个变量 a,它们的计算结果也都正确。所以原则上,循环内的代码应该不会有问题。但是,如果您希望新列在表中保留其作为计算列的行为,则此方法将不起作用——这留下了一个问题:如何从代码中生成一个具有公式“:column 1 * 2”的列……
回复:JSL:使用变量列名创建公式哦,我现在才发现我之前的帖子没有完全显示出来...很抱歉。
是的,我需要列保留它们的行为,或者至少保留它们的值。这就是为什么我想到在计算公式后直接删除它们。但我遇到的问题是,我没有找到与“公式...->清除”相同的语句,这意味着删除公式并保留原来的值。有人知道这是怎么回事吗?
这不是最好的解决方案,但目前对我来说已经足够了。回复:JSL:使用变量列名创建公式我现在采取的解决方法是将列中的值读入向量,并将计算出的值写入新列中。
但我仍然对未解决的问题的答案感兴趣。
达赫拉