JSL: falta el último valor de la columna cuando se llena con una listaHola
Cuando ejecuto una fórmula para asignar un elemento de una lista en una columna para filas donde se muestra un elemento de otra lista en otra columna, me encuentro con un problema inesperado: me falta el valor de la última fila.
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>Así es como se ve

Encontré el problema en varios campos donde hago el mismo ejercicio.
Encontré una solución al tomar el valor anterior (que sé que es el mismo que ordené la tabla).
// 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>Sin embargo, aunque esta solución funcionó para mi primera tabla, cuando trabajo en una segunda tabla recibo el siguiente mensaje y no logro resolver el problema.

No entiendo por qué recibo este mensaje, mientras que claramente acabo de crear una columna que contiene una fórmula y aparece como bloqueada.
¿Tendría alguna sugerencia sobre cómo resolver esto y por qué ocurrió esto en primer lugar?
Gracias de antemano
Saludos
NB: estoy usando JMP 16
secuencias de comandosRe: JSL: falta el último valor de la columna cuando se llena usando una listaHola,
Realmente evitaría una construcción como esta. Al mirar la fórmula en esa tabla, puede ver que hay un problema. Se encuentra con problemas de alcance (utilizando una lista definida fuera de una fórmula) e intenta escribir la columna dentro de la fórmula en la columna. No sabía que JMP nos dejaría...
Sin embargo, puedo reproducir su problema, pero no explicar exactamente por qué.
Entonces, mi propuesta sería hacer un bucle externo como se muestra en el siguiente script, es mucho más transparente.
La función loc() te da la posición (índice) en la lista.
Otra forma sería generar una tabla a partir de su ID_LIST y Vessel_LIST,
y unir esa tabla a la tabla con referencia 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: falta el último valor de la columna cuando se llena usando una listaSupongo un poco, pero creo que está haciendo mucho trabajo que no es necesario para llegar a su respuesta final.Además, está utilizando valores dentro de sus formatos que no son nativos del formato.Es decir, si guarda su tabla de datos después de ejecutar el formato, sale de su sesión de JMP, inicia una nueva sesión de JMP y abre su tabla de datos guardada, la fórmula generará un error.Las variables de "n", "Vessel_List" y "ID_Vessel" ya no se definirán en su nueva sesión de JMP.Por lo tanto, el formato ya no se ejecutará.
¿Podría la siguiente fórmula hacer lo que quieres?
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)];
)
);