用于重新编码多列的 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"
)
)
);
脚本回复:jsl脚本重新编码多列谢谢!
回复:jsl脚本重新编码多列一种解决方法是根据您要重新编码的列创建一个带有公式的新列。
然后删除原始列:)回复:jsl脚本重新编码多列非常感谢!
回复: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^") )
);
]\"
)
)
);
);
回复:jsl脚本重新编码多列非常感谢,您的关联数组代码运行良好。
我还尝试了另一个选项,通过添加
Match(As Column( lstColNames_n3[i])[Row()],
但这没有用。
但我解决了我的问题。
非常感谢。
回复:jsl脚本重新编码多列我编辑了我之前的回复,它应该有助于重新编码回复:jsl脚本重新编码多列我需要重新编码值。 谢谢。
回复: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()] 以获得匹配的单个值
Match(As Column( lstColNames_n3[i])[Row()],
编辑2:
添加了完整的示例脚本作为附件