JSL - dernière valeur manquante de la colonne lorsqu'elle est remplie à l'aide d'une listeBonjour
Lorsque j'exécute une formule pour affecter un élément d'une liste dans une colonne pour des lignes où un élément d'une autre liste est affiché dans une autre colonne, je rencontre un problème inattendu : il me manque la valeur de la dernière ligne.
ID_List = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48"};
Vessel_List = {"CS1-1", "CS1-2", "CS1-3", "CS1-4", "CS1-5", "CS1-6", "CS1-7", "CS1-8", "CS1-9", "CS1-10", "CS1-11", "CS1-12", "CS2-1", "CS2-2", "CS2-3", "CS2-4", "CS2-5", "CS2-6", "CS2-7", "CS2-8", "CS2-9", "CS2-10", "CS2-11", "CS2-12", "CS3-1", "CS3-2", "CS3-3", "CS3-4", "CS3-5", "CS3-6", "CS3-7", "CS3-8", "CS3-9", "CS3-10", "CS3-11", "CS3-12", "CS4-1", "CS4-2", "CS4-3", "CS4-4", "CS4-5", "CS4-6", "CS4-7", "CS4-8", "CS4-9", "CS4-10", "CS4-11", "CS4-12"};
dt << New Column( "Vessel NB",
"Numeric",
"Continuous",
Formula(
For( i = 1, i < N+1, i++,
r= dt<<GETROWSWHERE></GETROWSWHERE>Voici à quoi ça ressemble

J'ai rencontré le problème dans plusieurs domaines où je fais le même exercice.
J'ai trouvé une solution de contournement en prenant la valeur précédente (que je sais est la même que celle que j'ai triée dans le tableau).
// change data type of Vessel Nb to numeric continuous
Column("Vessel NB") << delete formula;
Column("Vessel NB") << unlock;
Column("Vessel NB")<< data type(numeric)<<FORMAT></FORMAT>Cependant, bien que cette solution de contournement ait fonctionné pour ma première table, lorsque je travaille sur une deuxième table, je reçois le message suivant et je n'arrive pas à résoudre le problème.

Je ne comprends pas pourquoi je reçois ce message alors que je viens clairement de créer une colonne contenant une formule et qui apparaît comme verrouillée.
Auriez-vous une suggestion sur la façon de résoudre ce problème et pourquoi cela s'est produit en premier lieu ?
Merci d'avance
Salutations
NB : j'utilise JMP 16
ScriptRe : JSL - dernière valeur manquante de la colonne lorsqu'elle est remplie à l'aide d'une listeSalut,
J'éviterais vraiment une construction comme celle-ci. En regardant la formule dans ce tableau, vous pouvez voir qu'il y a un problème. Vous rencontrez des problèmes de portée (en utilisant une liste définie à l'extérieur d'une formule) et vous essayez d'écrire la colonne elle-même dans la formule de la colonne. Je ne savais pas que JMP nous laisserait...
Cependant, je peux reproduire votre problème, mais pas exactement expliquer pourquoi.
Ma proposition serait donc de boucler à l'extérieur comme indiqué dans le script ci-dessous, c'est beaucoup plus transparent.
La fonction loc() vous donne la position (index) dans la liste.
Une autre façon serait de générer une table à partir de votre ID_LIST et Vessel_LIST,
et joignez cette table à la table avec la référence dt.
Names Default To Here( 1 );
ID_List = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24",
"25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48"};
Vessel_List = {"CS1-1", "CS1-2", "CS1-3", "CS1-4", "CS1-5", "CS1-6", "CS1-7", "CS1-8", "CS1-9", "CS1-10", "CS1-11", "CS1-12", "CS2-1", "CS2-2",
"CS2-3", "CS2-4", "CS2-5", "CS2-6", "CS2-7", "CS2-8", "CS2-9", "CS2-10", "CS2-11", "CS2-12", "CS3-1", "CS3-2", "CS3-3", "CS3-4", "CS3-5", "CS3-6",
"CS3-7", "CS3-8", "CS3-9", "CS3-10", "CS3-11", "CS3-12", "CS4-1", "CS4-2", "CS4-3", "CS4-4", "CS4-5", "CS4-6", "CS4-7", "CS4-8", "CS4-9", "CS4-10",
"CS4-11", "CS4-12"};
Show( N Items( ID_LIST ) );
Show( N Items( Vessel_LIST ) );
dt = New Table( "test", add rows( 48 ), New Column( "Vessel ID ViCell", Character, Nominal, set values( Vessel_list ) ) );
N = N Rows( dt );
dt << New Column( "row", "Numeric", "Continuous", Formula( For( i = 1, i <= N, i++, Column( dt, "row" )[i] = i ) ) );
dt << New Column( "Vessel NB",
"Numeric",
"Continuous",
Formula(
For( i = 1, i < N + 1, i++,
r = dt << getRowsWhere( :Vessel ID ViCell == Vessel_List[i] );
Column( dt, "Vessel NB" )[r] = ID_List[i];
)
)
);
// My proposal: run the loop outside, as the lists are outside, too
dt << New Column( "Vessel NB 2", "Numeric", "Continuous" );
For Each Row( dt, :Vessel NB 2 = ID_LIST[Loc( Vessel_LIST, :Vessel ID ViCell )[1]] );Re : JSL - dernière valeur manquante de la colonne lorsqu'elle est remplie à l'aide d'une listeJe devine un peu, mais je crois que vous faites beaucoup de travail qui n'est pas nécessaire pour arriver à votre réponse finale.De plus, vous utilisez des valeurs dans vos formats qui ne sont pas natives du format.Autrement dit, si vous enregistrez votre table de données après avoir exécuté le format, quittez votre session JMP, démarrez une nouvelle session JMP et ouvrez votre table de données enregistrée, la formule générera une erreur.Les variables "n", "Vessel_List" et "ID_Vessel" ne seront plus définies dans votre nouvelle session JMP.Par conséquent, le format ne fonctionnera plus.
La formule ci-dessous pourrait-elle faire ce que vous voulez?
dt << New Column( "Vessel NB",
"Numeric",
"Continuous",
Formula(
currVessel = :Vessel ID ViCell;
r = Current Data Table() << Get Rows Where( :Vessel ID ViCell == curVessel );
r[n items(r)];
)
);
Re : JSL - dernière valeur manquante de la colonne lorsqu'elle est remplie à l'aide d'une listeMerci Georg! Cela fonctionne comme un charme!