需要表達式、列引用、公式和列重命名方面的協助全部,
在以下情況下需要一些幫助。
我有一個字串格式的列名稱。
我需要使用基於舊列的公式建立一個新列。 我這樣做是這樣的:
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 ) ) ) ) ) );
從而產生以下形式的公式:舊專欄,而不是以作為列(“OldColumn”) ?
這是可以使用的完整腳本:
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() 的提示! 現在我不必轉義所有引號,它確實乾淨多了。
回覆:需要有關表達式、列引用、公式和列重命名的協助正如我在問題中解釋的那樣,“作為列”的問題在於它保留在公式中,然後當我稍後更改我在列中引用的列的名稱(並且我確實更改了它)時,公式變得無效
抱歉,您的組合 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");這樣公式就有:舊專欄而不是作為列(“OldColumn”)現在,您可以安全地重新命名列,而不會破壞公式。
回覆:需要有關表達式、列引用、公式和列重命名的協助這是對我有用的方法。我擴展了命名以處理複雜的 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" );
回覆:需要有關表達式、列引用、公式和列重命名的協助我看到一種方法可以做到這一點(但不是這樣做)。
取得列名而不是字串,而是作為引用,然後使用名稱表達式() :
oldCol = (dt << Get Column Names())[1];<BR />Eval( Eval Expr( dt << New Column( "NewColumn", formula( Name Expr( oldCol ) ) ) ) );
但我已經將列的名稱作為字串,並且想堅持使用它。