JSL - fehlender letzter Wert der Spalte beim Füllen mit einer ListeHallo
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, stoße ich auf ein unerwartetes Problem: 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 auf das Problem in mehreren Bereichen gestoßen, in denen ich dieselbe Übung mache.
Ich habe eine Problemumgehung gefunden, indem ich den vorherigen Wert genommen habe (von dem ich weiß, dass er derselbe ist, als 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 für meine erste 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 angezeigt wird.
Hätten Sie einen Vorschlag, wie Sie dies lösen können und warum dies überhaupt aufgetreten ist?
Vielen Dank im Voraus
Grüße
Hinweis: Ich verwende JMP 16
SkripterstellungBetreff: JSL - fehlender letzter Wert der Spalte beim Füllen über eine ListeHi,
Auf so eine Konstruktion würde ich wirklich verzichten. Wenn Sie sich die Formel in dieser Tabelle ansehen, können Sie sehen, dass es ein Problem gibt. 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. Wusste nicht, dass JMP uns ...
Allerdings kann ich dein Problem reproduzieren, aber nicht genau erklären warum.
Mein Vorschlag wäre also, eine Schleife nach außen zu führen, wie im folgenden Skript 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 verbinden 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]] );Betreff: JSL - fehlender letzter Wert der Spalte beim Füllen über eine ListeIch vermute ein bisschen, aber ich glaube, Sie machen eine Menge Arbeit, die nicht erforderlich ist, um zu Ihrer endgültigen Antwort zu gelangen.Außerdem verwenden Sie in Ihren Formaten Werte, die nicht nativ für das Format sind.Das heißt, wenn Sie Ihre Datentabelle speichern, nachdem Sie das Format ausgeführt haben, Ihre JMP-Sitzung beenden, eine neue JMP-Sitzung starten und Ihre gespeicherte Datentabelle öffnen, tritt bei 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 - fehlender letzter Wert der Spalte beim Füllen über eine ListeDanke Georg! Das funktioniert wie ein Zauber!