列作为变量时的循环问题我有一个表调用 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";
);
);脚本回复:当列作为变量时的循环问题使用
clear globals();
clear symbols();
清除
回复:当列作为变量时的循环问题在看不到整个代码的情况下,问题可能出在 dt 变量上。 一般来说,启动 JSL 脚本是个好主意名称默认为 Here(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";
);
);回复:当列作为变量时的循环问题嗨,吉姆,
感谢吉姆的帮助。
我尝试了很多次,但仍然无法正常工作。验证代码后。 我决定关闭 JMP 并重新打开它。 这一次,它正在工作。 请问是不是缓存的问题? 有没有办法在不重启 JMP 的情况下清理 jmp 缓存? 我的假设可能是错误的,但任何人都可以提出建议会有所帮助。
回复:当列作为变量时的循环问题您的代码工作正常。给定一张数据表

并运行您的代码副本
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 会将其转换为缺失值“.”