列を変数としてループする問題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";
);
);スクリプティングRe:列を変数としてループする問題コードは正常に機能します。与えられたデータテーブル

コードのコピーを実行します
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はそれを欠落している値「。」に変換します。
Re:列を変数としてループする問題こんにちはジム、
ジムに助けてくれてありがとう。
何度も試しましたが、まだ機能していません。コードの検証後。 JMPを閉じて再開することにしました。 今回は動作しています。 キャッシュの問題が原因なのかしら? JMPを再起動せずにjmpキャッシュをクリーンアップする方法はありますか? 私の仮定は間違っているかもしれませんが、誰でも提案を与えることができれば役に立ちます。
Re:列を変数としてループする問題コード全体が表示されない場合、問題は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";
);
);