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:使用變數列名建立公式我現在採取的解決方法是將列中的值讀入向量,並將計算的值寫入新列中。
但我仍然對未解決的問題的答案感興趣。
達赫拉