JSL-リストを使用して入力すると、列の最後の値が欠落しますこんにちは
別のリストの要素が別の列に表示されている行の列のリストから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"};
dt << New Column( "Vessel NB",
"Numeric",
"Continuous",
Formula(
For( i = 1, i < N+1, i++,
r= dt<<GETROWSWHERE></GETROWSWHERE>これがどのように見えるかです

同じ演習を行う複数のフィールドで問題が発生しました。
以前の値を使用して回避策を見つけました(テーブルを並べ替えたのと同じであることがわかっています)。
// 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>ただし、この回避策は最初のテーブルでは機能しましたが、2番目のテーブルで作業すると、次のメッセージが表示され、問題を解決できません。

このメッセージが表示される理由がわかりませんが、数式を含み、ロックされているように見える列を作成しただけです。
これを解決する方法と、そもそもなぜこれが発生したのかについての提案はありますか?
前もって感謝します
よろしく
注意:私はJMP16を使用しています
スクリプティングRe:JSL-リストを使用して入力すると、列の最後の値が欠落しますやあ、
私は本当にこのような構造を避けたいと思います。 その表の式を見ると、問題があることがわかります。 (数式の外部で定義されたリストを使用して)スコープの問題が発生し、数式内の列自体を列に書き込もうとします。 JMPが私たちに許可してくれることを知りませんでした...
しかし、私はあなたの問題を再現することはできますが、その理由を正確に説明することはできません。
したがって、私の提案は、以下のスクリプトに示すように、外側にループすることです。これは、はるかに透過的です。
loc()関数は、リスト内の位置(インデックス)を提供します。
別の方法は、ID_LISTとVessel_LISTからテーブルを生成することです。
そして、そのテーブルを参照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-リストを使用して入力すると、列の最後の値が欠落します少し推測しますが、最終的な答えを得るのに必要のない多くの仕事をしていると思います。さらに、フォーマットにネイティブではないフォーマット内の値を使用しています。つまり、フォーマットの実行後にデータテーブルを保存し、JMPセッションを終了し、新しいJMPセッションを開始して、保存したデータテーブルを開くと、数式はエラーになります。「n」、「Vessel_List」、および「ID_Vessel」の変数は、新しいJMPセッションで定義されなくなります。したがって、フォーマットは実行されなくなります。
以下の式はあなたが望むことをすることができますか?
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-リストを使用して入力すると、列の最後の値が欠落しますゲオルクありがとう! これは魅力のように機能しています!