使用現有列名創建公式Names Default To Here( 1 );
dt = Current Data Table();
numcol=dt << Get Column Names(Numeric);
charcol=dt << Get Column Names( Character);
For( k = 1, k <= N Items( numcol ), k++,
colname=column(numcol[k]) <<GET name=""></GET>
嗨 JMP 用戶,
我有一個數據表,我需要根據預定義的標準對數字列進行一些轉換。
我收到錯誤“在訪問或評估‘壞參數’時,表達式不適合第 1 行的可用列類型”。
關於如何解決這個問題的任何想法? 讚賞!
腳本回复:使用現有列名創建公式你有2個問題在這裡發生。
- 將公式呈現給新列時,在添加為公式之前不會對其進行處理。因此,當您指定
:Column(dt, colname)
JMP 不會將其更改為第一個數字列名,然後是第二個,依此類推。JSL 作者必須使用將引用擴展為完整/完成的 JSL 語句的代碼,然後再將其傳遞給 Format 元素
- 數據表中的列名(即 1、2、3、4 等)將導致 JMP 解釋它們時出現問題,除非您明確指出它們將被解釋為列名。因此,您需要使用 :"column name"n 結構
下面是您的代碼的修改,可生成您想要的新列
Names Default To Here( 1 );
dt = Current Data Table();
numcol = dt << Get Column Names( Numeric );
charcol = dt << Get Column Names( Character );
For( k = 1, k <= N Items( numcol ), k++,
colname = Column( numcol[k] ) << Get Name;
Eval(
Substitute(
Expr(
dt << New Column( "site" || numcol[k],
formula(
If(
:ID == "item5", (__colname__ * 0.5) / 20,
:ID == "item8", (__colname__ * 0.8) / 20,
__colname__
)
)
)
),
Expr( __colname__ ), Parse( ":\!"" || colname || "\!"n")
)
);
);回复:使用現有列名創建公式謝謝吉姆,它有效!