JSL - ultimo valore mancante della colonna quando viene compilata utilizzando un elencoCiao
Quando eseguo una formula per assegnare un elemento da un elenco in una colonna per le righe in cui un elemento di un altro elenco viene visualizzato in un'altra colonna, riscontro un problema imprevisto: mi manca il valore dell'ultima riga.
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>Ecco come appare

Ho riscontrato il problema in più campi in cui eseguo lo stesso esercizio.
Ho trovato una soluzione alternativa prendendo il valore precedente (che so essere lo stesso in cui ho ordinato la tabella).
// 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>Tuttavia, mentre questa soluzione ha funzionato per la mia prima tabella, quando si lavora su una seconda tabella ricevo il seguente messaggio e non riesco a risolvere il problema.

Non capisco perché ricevo questo messaggio mentre chiaramente ho appena creato una colonna che contiene una formula e appare come bloccata.
Avresti un suggerimento su come risolvere questo problema e perché questo si è verificato in primo luogo?
Grazie in anticipo
Saluti
NB: sto usando JMP 16
SceneggiaturaRe: JSL - ultimo valore mancante della colonna quando viene compilata utilizzando un elencoCiao,
Eviterei davvero una costruzione del genere. Guardando la formula in quella tabella puoi vedere che c'è un problema. Si verificano problemi di ambito (usando un elenco definito all'esterno in una formula) e si tenta di scrivere la colonna stessa all'interno della formula nella colonna. Non sapevo che JMP ci avrebbe permesso...
Tuttavia posso riprodurre il tuo problema, ma non spiegare esattamente perché.
Quindi la mia proposta sarebbe quella di girare all'esterno come mostrato nello script qui sotto, è molto più trasparente.
La funzione loc() fornisce la posizione (indice) nell'elenco.
Un altro modo sarebbe generare una tabella dal tuo ID_LIST e Vessel_LIST,
e unisci quella tabella alla tabella con riferimento 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 - ultimo valore mancante della colonna quando viene compilata utilizzando un elencoImmagino un po', ma credo che tu stia facendo molto lavoro che non è necessario per arrivare alla tua risposta finale.Inoltre, stai utilizzando valori all'interno dei tuoi formati che non sono nativi del formato.Cioè, se si salva la tabella di dati dopo aver eseguito il formato, si esce dalla sessione JMP, si avvia una nuova sessione JMP e si apre la tabella di dati salvata, la formula comporterà un errore.Le variabili di "n", "Vessel_List" e "ID_Vessel" non saranno più definite nella nuova sessione JMP.Pertanto, il formato non verrà più eseguito.
La formula seguente potrebbe fare quello che vuoi?
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 - ultimo valore mancante della colonna quando viene compilata utilizzando un elencoGrazie Giorgia! Funziona come un incantesimo!