problème de boucle lorsque la colonne est une variableJ'ai un appel de table dt et il a beaucoup de colonnes. Je veux trouver tout manquant dans des colonnes spécifiques et remplir avec "N". Voici mon script, mais la variable col[i] ne fonctionne pas.J'ai essayé de remplacer en tant que colonne (dt, col [i]) par colonne (dt, col [i]), mais cela ne fonctionne pas. Cependant, lorsque je remplace as column(dt, col[i]) par le vrai nom de colonne (exemple, :A), le script fonctionne. Toute suggestion où est mon erreur?
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";
);
);ScriptRe: problème de boucle lorsque la colonne est une variableVotre code fonctionne bien.Étant donné un tableau de données

et exécuter une copie de votre code
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";
);
);
Il en résulte ce qui suit

Le problème que vous rencontrez peut-être est que si vos colonnes A, B, C, D, E sont numériques, vous ne pourrez pas placer de valeur de caractère dans la cellule.JMP le convertira en une valeur manquante "."
Re: problème de boucle lorsque la colonne est une variableSalut Jim,
Merci Jim pour votre aide.
J'ai essayé plusieurs fois et ça ne marche toujours pas. après votre validation sur le code. J'ai décidé de fermer JMP et de le rouvrir. Cette fois, ça marche. Je me demande si cela n'est pas dû au problème de cache ? Existe-t-il un moyen de nettoyer le cache jmp sans redémarrer JMP ? Mon hypothèse est peut-être fausse, mais n'importe qui peut donner des suggestions sera utile.
Re: problème de boucle lorsque la colonne est une variableSans voir tout votre code, le problème pourrait être lié à la variable dt. En général, c'est une bonne idée de démarrer les scripts JSL avec Noms par défaut ici(1);. Cela permettra aux noms non résolus d'être stockés dans l'espace de noms Here.
Vous pouvez effacer des variables avec Delete Symbols(), Delete Globals() et parfois vous devrez peut-être également effacer certains espaces de noms.
Voici également une autre option pour modifier les valeurs vides à l'aide de l'indice Loc et de la table de données :
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";
);
);