Schleifenproblem, wenn Spalte als VariableIch habe eine Tabelle namens dt und sie hat viele Spalten. Ich möchte fehlende in bestimmten Spalten finden und mit "N" füllen. Unten ist mein Skript, aber die Variable col[i] funktioniert nicht.Ich habe versucht, als Spalte (dt, col[i]) durch Spalte (dt, col[i]) zu ersetzen, aber es funktioniert nicht. Wenn ich jedoch die as-Spalte (dt, col[i]) durch den wahren Spaltennamen (Beispiel: A) ersetze, funktioniert das Skript. Irgendein Vorschlag, wo ist mein Fehler?
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";
);
);SkripterstellungBetreff: Schleifenproblem, wenn Spalte als VariableDein Code funktioniert gut.Gegeben eine Datentabelle

und eine Kopie Ihres Codes ausführen
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";
);
);
Es ergibt sich folgendes

Das Problem, das Sie möglicherweise haben, ist, wenn Ihre Spalten A, B, C, D, E numerisch sind, können Sie keinen Zeichenwert in die Zelle einfügen.JMP konvertiert ihn in einen fehlenden Wert "."
Betreff: Schleifenproblem, wenn Spalte als VariableHallo Jim,
Danke Jim für deine Hilfe.
Ich habe es viele Male versucht und es funktioniert immer noch nicht. nach Ihrer Bestätigung des Codes. Ich beschloss, JMP zu schließen und erneut zu öffnen. Diesmal funktioniert es. Ich frage mich, ob es am Cache-Problem liegt? Gibt es eine Möglichkeit, den JMP-Cache zu bereinigen, ohne JMP neu zu starten? Meine Annahme könnte falsch sein, aber jeder kann einen Vorschlag machen, der hilfreich sein wird.
Betreff: Schleifenproblem, wenn Spalte als VariableOhne Ihren gesamten Code zu sehen, könnte das Problem bei der dt-Variablen liegen. Im Allgemeinen ist es eine gute Idee, JSL-Skripte mit zu starten Namen standardmäßig bis hierhin(1);. Dadurch können nicht aufgelöste Namen im Here-Namensraum gespeichert werden.
Sie können Variablen mit Delete Symbols(), Delete Globals() löschen und manchmal müssen Sie möglicherweise auch einige Namespaces löschen.
Hier ist auch eine andere Option zum Ändern leerer Werte mit Loc und Datentabellensubskription:
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";
);
);