列作為變量時的循環問題我有一個名為 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";
);
);