<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />嗨,我想快速輸入具有相同整體公式但不同變量的多個列。
我已經嘗試了以下但很明顯,我沒有使用正確的語法來調用新列函數中的公式項:
名稱默認為此處 (1);
dt = 當前數據表();
cc = N col (dt); // 保留原來的列號
對於 (i=9,i<= cc, i = i+2,
新列(“Delta” || 列名 (i+1),
數字,
連續的,
公式 (:Column Name(i+1) - :Column Name (i)) // 語法問題
);
);
感謝您的幫助。
真摯地。
EvalExpr 不執行 eval,因為您通常需要表達式以便繼續處理它。在這種情況下,別無他法。
evalexpr(3+4+expr(5+6))
3 + 4 + 11
JMP 具有強大的表達式操作功能,可對錶達式進行操作。這是一個例子; arg、head、substituteinto 是其他可以處理表達式的函數。
內省
列表和表達式
嗨,克雷格,
感謝您向我發送正確的代碼:我自己無法解決這個問題。
關於“Eval”和“Eval Expr”的使用,為什麼要把這兩個函數結合起來呢? 單獨使用“Eval Expr”會成功嗎?
感謝您的幫助。
真摯地,
蒂埃里
這個腳本可能會構建一些接近你所追求的東西。New Column 函數的 Formula 參數需要一個完全構建的公式,它在實際運行時需要採用的形式,即在腳本運行之後。下面的 eval( evalexpr( ... expr(...) ... expr(...) ... ) ) 策略是一種滿足您需要的方法。expr() 用於標記需要評估的部分。evalexpr() 尋找它們並評估它們。eval() 計算 evalexpr 返回的表達式。請注意,兩個 expr() 之間的減號不會在 for 循環內求值,但 names[i+1] 會求值(通過 evalexpr),NewColumn 會求值(通過 eval)。
<
dt = 新表("無標題",
添加行( 1 ),
新列(“a”,數字,“連續”,格式(“最佳”,12),設置值([1])),
新列(“b”,數字,“連續”,格式(“最佳”,12),設置值([2])),
新列(“c”,數字,“連續”,格式(“最佳”,12),設置值([4])),
新列(“d”,數字,“連續”,格式(“最佳”,12),設置值([8])),
新列(“e”,數字,“連續”,格式(“最佳”,12),設置值([16])),
新列(“f”,數字,“連續”,格式(“最佳”,12),設置值([32]))
);
cc = N col (dt);
名稱=dt<
對於(我= 1,我<= cc,我=我+ 2,
Eval( // 評估...返回的表達式
Eval Expr( // 評估嵌入的表達式...
New Column( "Delta " || char(names[ i + 1 ]), // 將列轉換為字符串
數字的,連續的,
// 公式不會自行計算。這種情況需要兩個表達式
公式( Expr( 名字[ i + 1 ] ) - Expr( 名字[ i ] ) )
)
)
)
);
/* ----- 生成的腳本 ------------------
新表(“無標題”,
添加行( 1 ),
新列(“a”,數字,“連續”,格式(“最佳”,12),設置值([1])),
新列(“b”,數字,“連續”,格式(“最佳”,12),設置值([2])),
新列(“c”,數字,“連續”,格式(“最佳”,12),設置值([4])),
新列(“d”,數字,“連續”,格式(“最佳”,12),設置值([8])),
新列(“e”,數字,“連續”,格式(“最佳”,12),設置值([16])),
新列(“f”,數字,“連續”,格式(“最佳”,12),設置值([32])),
新列(“Delta b”,數字,“連續”,格式(“最佳”,10),公式(:p - :A ) ),
新列(“Delta d”,數字,“連續”,格式(“最佳”,10),公式(:d - :c)),
新列(“Delta f”,數字,“連續”,格式(“最佳”,10),公式(:f - :e))
)
*/
