複数の列を再コード化するjslスクリプト親愛なるみんな、
次のスクリプトを使用して複数の列を再コード化しようとしています (データ テーブルの例と一緒に添付されています)。 いくつかの変更を試みましたが、うまくいきません。 列の値は、再コード化される代わりに消えます。
助けていただければ幸いです。
どうもありがとう、
マルチェロ。
dt3 = Current Data Table();
n3 = dt3 << Get Column Names();
Show( n3 );
lstColNames_n3 = dt3 << Get Column Names();
Show( lstColNames_n3 );
Show( lstCols_n3 );
lstCols_n3 = {};
For( i = 1, i <= N Items( lstColNames_n3 ), i++,
colName = lstColNames_n3[i];
col = Column( dt3, i );
Insert Into( lstCols_n3, col );
);
Show( lstCols_n3 );
For Each Row(
For( i = 1, i <= N Items( lstColNames_n3 ), i++,
As Column( lstColNames_n3[i] ) = Match( As Column( lstColNames_n3[i] ),
"1", "too low",
"2", "too low",
"3", "right",
"4", "too high",
"5", "too high"
)
)
);
スクリプティングRe: 複数の列を再コード化するjslスクリプトありがとう!
Re: 複数の列を再コード化するjslスクリプト回避策の 1 つは、再コード化する列に基づいて数式を使用して新しい列を作成することです。
次に、元の列を削除します:)Re: 複数の列を再コード化するjslスクリプトどうもありがとう!
Re: 複数の列を再コード化するjslスクリプトこれは、JSLで書かれたRecode機能を使用したソリューションです。行ごとの処理を行うよりもはるかに高速です
Names Default To Here( 1 );
dmdt = current data table();
nc = dmdt << get column names( Character );
For( i = 1, i <= N Items( nc ), i++,
col = Column( dt, nc[i] );
colname = col << getname();
Eval(
Parse(
Eval Insert(
"\[
dmdt << Recode Column(
:Name("^colname^"),
{Map Value( _rcOrig,
{ "1", "too low",
"2", "too low",
"3", "right",
"4", "too high",
"5", "too high"},
Unmatched( _rcNow ) )},
Update Properties( 1 ),
Target Column( :Name("^colname^") )
);
]\"
)
)
);
);
Re: 複数の列を再コード化するjslスクリプト連想配列を使用したコードは完全に機能しました。
追加して、他のオプションも試しました
Match(As Column( lstColNames_n3[i])[Row()],
しかし、それはうまくいきませんでした。
しかし、私は自分の問題を解決しました。
どうもありがとう。
Re: 複数の列を再コード化するjslスクリプト以前の返信を編集しました。再コーディングに役立つはずですRe: 複数の列を再コード化するjslスクリプト値を再コード化する必要があります。 ありがとう。
Re: 複数の列を再コード化するjslスクリプト値を再コード化する必要がありますか、または列プロパティの値ラベルを使用できますか (この方法では元のデータが失われません)。例: JSL スクリプトを使用して複数の列を再コーディングする
編集:
それらを所定の位置に再コーディングする必要がある場合は、複数の方法があります (連想配列を使用します)。
Names Default To Here(1);
dt3 = current data Table ();
n3 = dt3 << Get Column Names(string);
show(n3);
//create associative array to use matching keys to values
matchAa = Associative Array(
{"1","2","3","4","5"},
{"too low","too low","right","too high","too high"}
);
show(matchAa);
//loop over column names
For(i = 1, i <= N Items(n3), i++,
//refer to column and use set each value to update values
Column(dt3, n3[i]) << Set Each Value(
matchAa[AsColumn(n3[i])[Row()]]
);
);
そして、あなたのソリューションでは、Match 関数で値を参照する方法に問題があると思います。[Row()] を追加して、Matching の単一の値を取得する必要があります。
Match(As Column( lstColNames_n3[i])[Row()],
編集2:
完全なサンプル スクリプトを添付ファイルとして追加