JSL: manca l'ultimo valore della colonna quando viene compilato 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 è lo stesso che 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 alternativa ha funzionato per la mia prima tabella, quando lavoro 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
Miscelazione e pulizia dei datiQualità e ingegneria di processoRi: JSL - Manca l'ultimo valore della colonna quando viene compilato utilizzando un elencoHo avuto un errore di battitura nel mio post precedente.Prova il seguente JSL e vedi se ottieni gli stessi risultati di @Georg
Names Default To Here( 1 );
dt=current data table();
dt << New Column( "Vessel NB 3",
"Numeric",
"Continuous",
Formula(
currVessel = :Vessel ID ViCell;
r = Current Data Table() << Get Rows Where( :Vessel ID ViCell == currVessel );
try(r[n items(r)]);
)
);
Ri: JSL - Manca l'ultimo valore della colonna quando viene compilato utilizzando un elencoCiao Jim,
quello che sto cercando di fare è "tradurre" l'ID della nave in un numero di nave. Ci sono più di 48 righe, quindi non penso che la tua soluzione sarebbe d'aiuto.
Grazie lo stesso
Saluti
Celine
Ri: JSL - Manca l'ultimo valore della colonna quando viene compilato utilizzando un elencoGrazie Giorgio! Funziona a meraviglia!
Ri: JSL - Manca l'ultimo valore della colonna quando viene compilato utilizzando un elencoSto indovinando un po ', ma credo che tu stia facendo molto lavoro che non è necessario per arrivare alla tua risposta finale.Inoltre, all'interno dei tuoi formati stai utilizzando valori che non sono nativi del formato.In altre parole, se salvi la tabella dei dati dopo aver eseguito il formato, esci dalla sessione JMP, avvii una nuova sessione JMP e apri la tabella dei dati salvata, la formula andrà in 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)];
)
);
Ri: JSL - Manca l'ultimo valore della colonna quando viene compilato utilizzando un elencoCIAO,
Eviterei davvero una costruzione come questa. Guardando la formula in quella tabella puoi vedere che c'è un problema. Ti imbatti in problemi di ambito (utilizzando un elenco definito all'esterno in una formula) e provi a 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 eseguire il loop 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]] );