列作为变量时的循环问题我有一个名为 dt 的表,它有很多列。 我想在特定列中查找任何缺失并填写“N”。 下面是我的脚本,但 col[i] 变量不起作用。我尝试用 column(dt, col[i]) 替换为 column(dt, col[i]),但不工作。 但是,当我将 as column(dt, col[i]) 替换为真实的列名(例如:A)时,脚本就可以工作了。 任何建议我的错误在哪里?
col={"A", "B", "C", "D", "E"};
For( i = 1, i<= N Items( col ), i++,
empty_rows = dt << get rows where (is missing(as column(dt, col[i])));
if (nrows(empty_rows) > 0,
as column(dt, col[i])[empty_rows] = "N";
);
);脚本回复:列作为变量时的循环问题您的代码工作正常。给定一个数据表

并运行您的代码副本
names default to here(1);
dt=current data table();
col={"A", "B"};
For( i = 1, i<= N Items( col ), i++,
empty_rows = dt << get rows where (is missing(as column(dt, col[i])));
if (nrows(empty_rows) > 0,
as column(dt, col[i])[empty_rows] = "N";
);
);
结果如下

您可能遇到的问题是,如果您的 A、B、C、D、E 列是数字,您将无法将字符值放入单元格中。JMP 会将其转换为缺失值“。”
回复:列作为变量时的循环问题嗨,吉姆,
感谢吉姆的帮助。
我尝试了很多次,但仍然无法正常工作。在您对代码进行验证后。 我决定关闭 JMP 并重新打开它。 这一次,它正在工作。 请问是不是缓存问题? 有没有办法在不重新启动 JMP 的情况下清理 jmp 缓存? 我的假设可能是错误的,但任何人都可以提出建议会有所帮助。
回复:列作为变量时的循环问题如果没有看到您的整个代码,问题可能出在 dt 变量上。 一般来说,使用 JSL 脚本启动是个好主意名称默认为此处(1);。 这将允许将未解析的名称存储在 Here 命名空间中。
您可以使用 Delete Symbols()、Delete Globals() 清除变量,有时您可能还需要清除一些命名空间。
这也是使用 Loc 和数据表下标更改空值的其他选项:
Names Default To Here(1);
dt = Current Data Table();
col = {"A", "B"};
For(i = 1, i <= N Items(col), i++,
empty_rows = Loc(dt[0, col[i]], "");
If(N Rows(empty_rows) > 0,
dt[empty_rows, col[i]] = "N";
);
);