在表达式、列引用、公式和列重命名方面需要帮助全部,
在以下情况下需要一些帮助。
我有一个字符串格式的列名。
我需要基于旧的公式创建一个新列。 我这样做:
oldCol = "OldColumn";
Eval( Eval Expr( dt << New Column( "NewColumn", formula( As Column( Expr( oldCol ) ) ) ) ) );
然后在脚本的后面我需要重命名旧列。 我这样做:
Column(oldCol) << Set Name("NewOldColumn");现在的问题是,因为我有以下形式的新列的公式:
As Column("OldColumn")当 OldColumn 更改名称时它不会更新。
我想以以下形式拥有它
:OldColumn
但我不知道该怎么做。
所以,问题是:我需要如何修改表达式:
Eval( Eval Expr( dt << New Column( "NewColumn", formula( As Column( Expr( oldCol ) ) ) ) ) );
以便它以以下形式生成公式:旧列, 而不是以作为列(“旧列”) ?
这是完整的脚本:
dt = New Table( "TestColumnsReferences",
Add Rows( 3 ),
New Column( "OldColumn", Character, "Nominal", Set Values( {"a", "b", "c"} ) )
);
oldCol = (dt << Get Column Names(string))[1];
//oldCol = "OldColumn";
Eval( Eval Expr( dt << New Column( "NewColumn", formula( As Column( Expr( oldCol ) ) ) ) ) );
Column(oldCol) << Set Name("NewOldColumn");谢谢,M。
消费者和市场研究回复:需要有关表达式、列引用、公式和列重命名的帮助感谢您对 JSL Quote() 的提示! 现在我不必转义所有引号,它真的更干净了。
回复:需要有关表达式、列引用、公式和列重命名的帮助正如我在问题中解释的那样,“As Column”的问题是它保留在公式中,然后当我稍后更改我在列中引用的列的名称(并且我确实更改了它)时,公式变得无效
抱歉,您的组合 Expr --> Name Expr --> As Column 它确实有效! 它将 As Column("string") 变成 :string!
我在这里得到了几种解决方案,我非常喜欢带有 JSL Quote 的解决方案,但这是我的新宠。 将不得不重新重新编写脚本:)
回复:需要有关表达式、列引用、公式和列重命名的帮助另一种选择是 Eval()、EvalExpr()、Expr()、Name Expr() 和 As Column() 的组合
Names Default To Here(1);
dt = New Table("TestColumnsReferences", Add Rows(3),
New Column("OldColumn", Character, "Nominal", Set Values({"a", "b", "c"}))
);
oldCol = (dt << Get Column Names(string))[1];
//oldCol = "OldColumn";
Eval(Eval Expr(dt << New Column("NewColumn", formula(Expr(Name Expr(AsColumn(oldCol)))))));
Column(oldCol) << Set Name("NewOldColumn");回复:需要有关表达式、列引用、公式和列重命名的帮助我个人喜欢使用JSL报价()函数来维护语法突出显示和词法分析——然后只需将值传递给:姓名()指令本身
dt = New Table( "TestColumnsReferences",
Add Rows( 3 ),
New Column( "OldColumn", Character, "Nominal", Set Values( {"a", "b", "c"} ) )
);
oldCol = (dt << Get Column Names(string))[1];
//oldCol = "OldColumn";
Eval( Parse( Eval Insert( JSL Quote(
dt << New Column( "NewColumn", Formula( :Name("^oldCol^") ) )
) ) ) );
Column(oldCol) << Set Name("NewOldColumn");回复:需要有关表达式、列引用、公式和列重命名的帮助是的,基本上与我在下面展示的方法相同,只使用代替代替评估插入, 正确的?
回复:需要有关表达式、列引用、公式和列重命名的帮助好的,我想通了。 对于公式部分,只需使用以下链:
Name Expr(Expr(Parse(Eval Insert(":#oldCol#", startChar="#"))))必须使用 startChar="#" 因为在实际的脚本公式中实际上使用了使用 "^" 的 REGEx。
所以完整的脚本是这样的:
dt = New Table( "TestColumnsReferences",
Add Rows( 3 ),
New Column( "OldColumn", Character, "Nominal", Set Values( {"a", "b", "c"} ) )
);
oldCol = (dt << Get Column Names(string))[1];
//oldCol = "OldColumn";
Eval( Eval Expr( dt << New Column( "NewColumn", formula( Name Expr(Expr(Parse(Eval Insert(":#oldCol#", startChar="#")))) ) ) ) );
Column(oldCol) << Set Name("NewOldColumn");这样公式有:旧列而不是作为列(“旧列”)您现在可以在不破坏公式的情况下安全地重命名列。
回复:需要有关表达式、列引用、公式和列重命名的帮助这是一种对我有用的方法。我扩展了命名以处理复杂的 JMP 列名称。这让读者有点困惑,但使该方法更强大
dt = New Table( "TestColumnsReferences",
Add Rows( 3 ),
New Column( "OldColumn+one", Character, "Nominal", Set Values( {"a", "b", "c"} ) )
);
oldCol = (dt << Get Column Names( string ))[1];
//oldCol = "OldColumn";
//Eval( Eval Expr( dt << New Column( "NewColumn", formula( As Column( Expr( oldCol ) ) ) ) ) );
Eval(
Substitute(
Expr(
dt << New Column( "NewColumn", formula( __oldCol__ ) )
),
Expr( __oldCol__ ), parse(":\!"" || oldCol || "\!"n")
)
);
Column( oldCol ) << Set Name( "NewOldColumn" );
回复:需要有关表达式、列引用、公式和列重命名的帮助我看到了一种方法(但不是这样做)。
获取列名不是字符串,而是作为引用,然后使用名称 Expr() :
oldCol = (dt << Get Column Names())[1];<BR />Eval( Eval Expr( dt << New Column( "NewColumn", formula( Name Expr( oldCol ) ) ) ) );
但我已经将列的名称作为字符串,并且想坚持使用它。