通過引用變量來調用列這裡是一個完全的新手,
在舊帖子中找不到解決方案,
我創建了一個包含現有列名稱的變量。 我想創建一個新列,將對其他兩列的數據進行求和(通過變量調用列)。變量的用法是為了稍後在 for 循環中使用。
感謝您的幫助!
對於以下代碼:
dt = Current Data Table();
columnname1 = Column( dt, 1 ) << Get Name;
columnname2 = Column( dt, 2 ) << Get Name;
dt << New Column( "new_" || columnname1, Numeric , continuous, formula(column(dt, columnname1)+column(dt, columnname2)));
我收到以下錯誤:
列 new_Column 1 2 公式中斷
無法將參數轉換為數字 [或矩陣] 1 次 At rows: 2 操作: Add, Column( dt, columnname1 ) + /*###*/Column( dt, columnname2 ) /*###*/
公式計算錯誤已被忽略
列(“new_Column 1 2”)
高級統計建模數據存取數據混合和清理數據探索和可視化回复:通過引用變量調用列@tx尼爾森這一點是非常正確的。我建議的方法是一個懶惰的選擇,事後看來不是我推薦的方法。如果您只想要一個具有正確值的列,您可以在循環中進行計算,而不必費心使用公式;如果公式對您很重要,那麼您需要檢查您的腳本是否正確編碼了公式 - 數字顯示正確還不夠。腳本變量不會在腳本的生命週期之外持續存在,因此公式需要正確包含列引用 - 這是通過使用表達式替換技術(例如 Jim 所演示的技術)來實現的。
回复:通過引用變量調用列感謝您的快速答复。有用!
回复:通過引用變量調用列你可以讓它工作,用
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );
columnname1 = Column( dt, 4 ) << Get Name;
columnname2 = Column( dt, 5 ) << Get Name;
dt << New Column( "new_" || columnname1,
Numeric,
continuous,
formula(
As Column( dt, columnname1 ) + As Column( dt, columnname2 )
)
);
然而,這有一個潛在的問題。存儲的公式為:

只要您的 JMP 會話有效,此公式就會繼續有效
- 已定義變量 dt、columnname1 和columnname2。如果您保存數據表,關閉 JMP,然後明天您進來啟動 JMP,並打開數據表,會發生什麼情況。該公式將找不到這些變量,並且該公式將失敗。
- 在會話內,變量 dt、columnname1 和columnname2 不會更改其值。因此,如果您創建此列,並稍後在腳本中更改變量columnname1的值,因為JMP數據表中的公式列是動態的,當數據表發生更改時,公式將重新運行,JMP將使用變量的新值,並將為公式列創建新值。
您真正需要做的是使用一種方法來為公式創建實際的 JSL 語法。在上面的示例中,您真正想要的是公式為
:height + :weight
下面的 JSL 是實現此目的的一種方法。它使用 Substitute() 函數將實際的列名稱植入到公式中。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );
columnname1 = Column( dt, 4 ) << Get Name;
columnname2 = Column( dt, 5 ) << Get Name;
Eval(
Substitute(
Expr(
dt << New Column( "new_" || columnname1,
Numeric,
continuous,
formula( __c1__ + __c2__ )
)
),
Expr( __c1__ ), Parse( ":" || columnname1 ),
Expr( __c2__ ), Parse( ":" || columnname2 )
)
);回复:通過引用變量調用列您已經創建了引用列的變量。您可以在公式中使用它們,但需要使用 AsColumn 函數:
formula( AsColumn(columnname1) + AsColumn(columnname2) )
回覆:透過引用變數呼叫列僅供此問題的未來讀者參考:
我使用上面的程式碼將字串列名稱傳遞給公式,但在使用時遇到問題
Parse(":" || column_name)解析很容易受到奇數列名稱的影響,因為像“a - b”這樣的列名稱將被解釋為列“a”減去變數“b”。
而是使用
As Name(columnname)
這解決了這個問題。