Recode Columnメッセージを使うと、列内のすべての値を一度に変更することができます。元の列(参照列)、変換のリスト、出力先の列を指定します。この機能は、参照列を変換し、出力先の列を更新します。Update Properties引数がオンになっている場合は、列を再コード化したときに「値ラベル」、「値スコア」、「値の表示順序」、「値の色」、「上位カテゴリ」、「コード変換」、「欠測値のコード」の列プロパティが更新されます。
obj << Recode Column(<column reference>, {<transform>, ...}, <Update Properties(0|1)>, Target Column(<column reference> | <column name>))
Recode Columnの実行中に、以下の2つの特殊なJSL変数に値が設定されます。
_rcNow
現在のステップまでの変換を実行した後の値。
_rcOrig
元の値。
変換を開始する時点では、_rcNowおよび_rcOrigは同じ値を持っています。
次の例では、「Consumer Preferences.jmp」で、「性別」列のコード変換を1|2から0|1に変更し、値ラベルはそのままにしています。
dt = Open( "$SAMPLE_DATA/Consumer Preferences.jmp" );
col = New Column( :性別 );
dt << Recode Column(
:性別,
{if(
_rcNow == 1, 0,
1,
)},
Update Properties( 1 ),
Target Column( col )
);
元の列に変換を適用することもできます。「Big Class.jmp」の「年齢」列を年齢グループに再コード化します。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Recode Column(
:年齢,
{if(
_rcNow >= 17, "高学年",
_rcNow >= 15, "中学年",
"低学年"
)},
Target Column( :年齢)
);
次の例では、列の再コード化に_rcOrigと_rcNowの両方を使用しています。_rcOrigを使用して、CAROLの新しい値がCHRISの元の値とまとめられて両方が’Christine’に変更されてしまうことのないようにしています。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Begin Data Update;
col1 = dt << New Column( dt:name );
col1 << Set Name( "name Titlecase" );
dt << Move Selected Columns( {col1}, after( dt:name ) );
dt << Recode Column(
dt:name,
{Titlecase( _rcOrig ),
Map Value(
_rcOrig,
{"CAROL", "Chris",
"CHRIS", "Christine"},
Unmatched( _rcNow ) //変換後の値。
)},
Update Properties( 1 ),
Target Column( col1 )
);
dt << End Data Update;