用列表重新编码多列我想通过使用 For Each 函数遍历每一列,使用条件公式对多列进行重新编码。 我无法使用以下代码成功重新编码:
<
//创建要重新编码的列列表
ColNames = {dt:Name("col 1"), dt:Name("col 2"),
dt:Name("col 3"), dt:Name("col 4")};
对于每个({listitem},ColNames,重新编码(
项目清单,
{小写(_rcNow),如果(包含(_rcNow,“太多”),
"1000",
_rcNow
), 正则表达式( _rcNow, "\D*(\d+\.?\d*)\D*", "\1", GLOBALREPLACE )}
));
我的预感是 For Each 子句的主体是不正确的——我必须以某种方式更清楚地标出列。
作为“dt”的数据表是在代码的前面建立的。 作为记录,我在使用脚本时没有收到错误,但列未正确重新编码。 谢谢。
脚本回复:用列表重新编码多个列也许您只需要使用 Recode Column 而不是 Recode,然后稍微修改一下如何引用列。
这似乎有效,至少它在 col 1 中用 1000 代替了太多:
Names Default To Here(1);
dt = New Table("Untitled 2",
Add Rows(1),
New Column("col 1", Character, "Nominal", Set Values({"too much"})),
New Column("col 2", Character, "Nominal", Set Values({"a"})),
New Column("col 3", Character, "Nominal", Set Values({"c"})),
New Column("col 4", Character, "Nominal", Set Values({"d"}))
);
//Create list of columns to be recoded
ColNames = {"col 1"};
For Each({listitem}, ColNames,
dt << Recode Column(
//As Column(dt, listitem),
AsColumn(listitem),
{Lowercase(_rcNow), If(Contains(_rcNow, "too much"),
"1000",
_rcNow
), Regex(_rcNow, "\D*(\d+\.?\d*)\D*", "\1", GLOBALREPLACE)},
Update Properties(1),
Target Column(Column(listitem))
)
);回复:用列表重新编码多个列我出于我的目的调整了这里的代码(列表中的几列),但它仍然不起作用:
ColNames = {dt:Name("col 1"), dt:Name("col 2"),
dt:Name("col 3"), dt:Name("col4")};
For Each({listitem}, ColNames,
dt<<RECODE column=""></RECODE>你是在建议我逐列重新编码吗?
回复:用列表重新编码多个列我不确定 Recode Columns 需要哪些列格式。 您可以看到我们对 ColNames 使用了不同的语法(我使用的是列名列表,而您使用的是旧方式来引用列(Name("col name"),它已被替换为 "col name"n) ,我们也在目标列中使用不同的列。
如果运行我使用此数据表给出的示例:

我结束了这个

这是更新的示例,其中添加了新表和更多列到 ColNames 列表
Names Default To Here(1);
dt = New Table("Untitled 2",
Add Rows(3),
Compress File When Saved(1),
New Column("col 1", Character, "Nominal", Set Values({"1000", "too much", "too much"})),
New Column("col 2",
Character,
"Nominal",
Set Values({"too much", "", ""}),
Set Display Width(65)
),
New Column("col 3", Character, "Nominal", Set Values({"c", "", "too much"})),
New Column("col 4", Character, "Nominal", Set Values({"d", "", ""}))
);
wait(1);
//Create list of columns to be recoded
ColNames = {"col 1", "col 2", "col 3", "col 4"};
For Each({listitem}, ColNames,
dt << Recode Column(
//As Column(dt, listitem),
As Column(listitem),
{Lowercase(_rcNow), If(Contains(_rcNow, "too much"),
"1000",
_rcNow
), Regex(_rcNow, "\D*(\d+\.?\d*)\D*", "\1", GLOBALREPLACE)},
Update Properties(1),
Target Column(Column(listitem))
)
);
回复:用列表重新编码多个列谢谢你的帮助! Jordan Hiller 帮助我理解了您的原始回复。 我不明白为什么使用列列表作为字符串有效,而使用实际列列表不起作用,但无论如何我现在都遵循您的解决方案。 有助于了解现在如何调用列名。 好提醒。 再次感谢。