列作為變數時的循環問題我有一個名為 dt 的表,它有很多列。 我想找到特定列中缺少的任何內容並用“N”填充。 下面是我的腳本,但 col[i] 變數不起作用。我嘗試將 as 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 腳本是個好主意名稱預設為此處(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 會將其轉換為缺失值“.”