JSL – Der letzte Wert der Spalte fehlt, wenn sie mithilfe einer Liste gefüllt wirdHallo
Wenn ich eine Formel ausführe, um ein Element aus einer Liste in einer Spalte für Zeilen zuzuweisen, in denen ein Element einer anderen Liste in einer anderen Spalte angezeigt wird, tritt ein unerwartetes Problem auf: Mir fehlt der Wert der letzten Zeile.
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>So sieht es aus

Ich bin in mehreren Bereichen auf das Problem gestoßen, in denen ich dieselbe Übung durchführe.
Ich habe eine Problemumgehung gefunden, indem ich den vorherigen Wert übernommen habe (von dem ich weiß, dass er derselbe ist, wie ich die Tabelle sortiert habe).
// 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>Während diese Problemumgehung jedoch bei meiner ersten Tabelle funktionierte, erhalte ich bei der Arbeit an einer zweiten Tabelle die folgende Meldung und schaffe es nicht, das Problem zu lösen.

Ich verstehe nicht, warum ich diese Meldung erhalte, obwohl ich offensichtlich gerade eine Spalte erstellt habe, die eine Formel enthält und als gesperrt erscheint.
Hätten Sie einen Vorschlag, wie das Problem gelöst werden kann und warum es überhaupt passiert ist?
Vielen Dank im Voraus
Grüße
NB: Ich verwende JMP 16
Datenmischung und -bereinigungQualitäts- und VerfahrenstechnikBetreff: JSL – Der letzte Wert der Spalte fehlt, wenn sie mithilfe einer Liste gefüllt wirdIch hatte einen Tippfehler in meinem vorherigen Beitrag.Probieren Sie die folgende JSL aus und sehen Sie, ob Sie die gleichen Ergebnisse erhalten wie @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)]);
)
);
Betreff: JSL – Der letzte Wert der Spalte fehlt, wenn sie mithilfe einer Liste gefüllt wirdHallo Jim,
Ich versuche, die Schiffs-ID in eine Schiffsnummer zu „übersetzen“. Es gibt mehr als 48 Zeilen, daher glaube ich nicht, dass Ihre Lösung helfen würde.
Trotzdem danke
Grüße
Céline
Betreff: JSL – Der letzte Wert der Spalte fehlt, wenn sie mithilfe einer Liste gefüllt wirdDanke Georg! Das funktioniert wie ein Zauber!
Betreff: JSL – Der letzte Wert der Spalte fehlt, wenn sie mithilfe einer Liste gefüllt wirdIch vermute ein wenig, aber ich glaube, dass Sie eine Menge Arbeit leisten, die nicht erforderlich ist, um zu Ihrer endgültigen Antwort zu gelangen.Darüber hinaus verwenden Sie in Ihren Formaten Werte, die nicht für das Format nativ sind.Das heißt, wenn Sie Ihre Datentabelle nach dem Ausführen der Formatierung speichern, Ihre JMP-Sitzung beenden, eine neue JMP-Sitzung starten und Ihre gespeicherte Datentabelle öffnen, tritt in der Formel ein Fehler auf.Die Variablen „n“, „Vessel_List“ und „ID_Vessel“ werden in Ihrer neuen JMP-Sitzung nicht mehr definiert.Daher wird das Format nicht mehr ausgeführt.
Könnte die folgende Formel das tun, was Sie wollen?
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)];
)
);
Betreff: JSL – Der letzte Wert der Spalte fehlt, wenn sie mithilfe einer Liste gefüllt wirdHallo,
Ich würde eine solche Konstruktion wirklich vermeiden. Wenn Sie sich die Formel in dieser Tabelle ansehen, können Sie erkennen, dass ein Problem vorliegt. Sie stoßen auf Scoping-Probleme (bei Verwendung einer außerhalb einer Formel definierten Liste) und versuchen, die Spalte selbst innerhalb der Formel in die Spalte zu schreiben. Ich wusste nicht, dass JMP uns erlauben würde ...
Allerdings kann ich Ihr Problem reproduzieren, aber nicht genau erklären, warum.
Mein Vorschlag wäre also, eine Schleife nach außen zu erstellen, wie im Skript unten gezeigt, es ist viel transparenter.
Die Funktion loc() gibt Ihnen die Position (Index) in der Liste.
Eine andere Möglichkeit wäre, eine Tabelle aus Ihrer ID_LIST und Vessel_LIST zu generieren.
und verknüpfen Sie diese Tabelle mit der Tabelle mit der Referenz 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]] );