既存の列名を使用して数式を作成する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ユーザー、
事前定義された基準に基づいて数値列でいくつかの変換を行う必要があるデータテーブルがあります。
「'BadArgument'のアクセスまたは評価で、式が行1で使用可能な列タイプに適合しません」というエラーが発生します。
これを解決する方法について何かアイデアはありますか? 感謝!
スクリプティングRe:既存の列名を使用して数式を作成するここで2つの問題が発生しています。
- 数式が新しい列に表示される場合、数式として追加される前に処理されません。したがって、指定する場合
:Column(dt, colname)
JMPは、最初の数値列名、次に2番目の列名などに変更しません。JSL作成者は、フォーマット要素に渡す前に、参照を完全な/完成したJSLステートメントに展開するコードを使用する必要があります。
- データテーブルの列名、つまり1、2、3、4などは、列名として解釈されることを特に指定しない限り、JMPによる列名の解釈で問題を引き起こします。したがって、:"列名"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")
)
);
);