ループを使用した JSL スクリプトと概要このループを機能させる方法について提案が必要です。Group( Box(i) ) の行でしゃっくりし続けます。数値または括弧/間違った列名に問題があるのではないかと思いました。しかし、これらを調整しても役に立ちませんでした
For( j = 1, j < 3, j++,
nrj j = dt1 << Summary(
Group( Box( i ) ),
Freq( "None" ),
Weight( "None" ),
Link to original data table( 0 ),
output table name( "Sum " || Char( j ) )
)
);
データアクセスデータのブレンディングとクリーンアップRe: ループを使用した JSL スクリプトと概要Place ID という列を含むデータ テーブルを作成しました。1 ~ 850 の範囲の 100 個のランダムな値を入力しました。

次に、さまざまな Box と ActualLoc のコード セクションを実行すると、次のようなデータ テーブルが作成されました。

これらの操作を実行する意図がわかりません。
私には(私が間違っている可能性が高いですが)、使用しているいくつかの要素を理解していないようです。最初の For() ループ内で、Scenario、Box、および ActualLoc の同じ列を 5 回作成します。また、JMP では列に同じ名前を付けることができないため、最初のループで Scenario、Box、および ActualLoc を作成するときに、これらが実際に使用される名前になります。ただし、ループ 2 では、JMP は名前を Scenario 2、Box 2、および ActualLoc 2 に強制します。ループ 3、4、および 5 ではこの動作が繰り返されます。使用されている数式も少しわかりにくいです。(:場所ID - i)の指定を繰り返し使用しています。これは式で使用されているため、式がデータ テーブルの各行に適用され、この計算の結果が指定された行 (つまり、私の行 1 の行 1) の変数 Place ID の値になります。データ テーブルの値は 268) で、最初のループでは 1、2 番目のループでは 2 という値を持つ i の現在の値が減算されます。したがって、行 1 の値の範囲は 267 ~ 263 になります。 。:Place ID -1 が :Place ID の前の列を参照していると考えているのではないかと思います。
列 Place ID を含むデータ テーブルに対して何をしようとしているのかを明確にしていただけますか。
Re: ループを使用した JSL スクリプトと概要うーん、よくわかりません...私のスクリプトスキルは標準以下です。 これが私のコード全体です。 概要ステップのループセクションまでは正常に実行されます。
t1 = Open( "C:\Users\ClaireR\Desktop\Example\ExampleABC.jmp" );
For( i = 1, i <= 5, i++,
dt1 << New Column( "Scenario", Numeric, "Continuous", Formula( :Place ID - i ) );
dt1 << New Column( "Box",
Character,
"Nominal",
Formula(
If( (:Place ID - i) <= 200,
"Ground",
If( (:Place ID - i) <= 250,
"Drop 1",
If( (:Place ID - i) <= 400,
"Ground",
If( (:Place ID - i) <= 450,
"Drop 2",
If( (:Place ID - i) <= 600,
"Ground",
If( (:Place ID - i) <= 650,
"Drop 3",
If( (:Place ID - i) <= 800,
"Ground",
If( (:Place ID - i) <= 850,
"Drop 4",
"Ground"
)
)
)
)
)
)
)
)
)
);
dt1 << New Column( "ActualLoc",
Character,
"Nominal",
Formula(
If( (:Place ID - i) <= 200,
"Ground",
If( (:Place ID - i) <= 250,
:Place ID 2,
If( (:Place ID - i) <= 400,
"Ground",
If( (:Place ID - i) <= 450,
:Place ID 2,
If( (:Place ID - i) <= 600,
"Ground",
If( (:Place ID - i) <= 650,
:Place ID 2,
If( (:Place ID - i) <= 800,
"Ground",
If( (:Place ID - i) <= 850,
:Place ID 2,
"Ground"
)
)
)
)
)
)
)
)
)
);
);
:Scenario << Set Name( "Scenario 1" );
:Box << Set Name( "Box 1" );
:ActualLoc << Set Name( "ActualLoc" );
mrj = {};
For( j = 1, j < 3, j++,
newDT = dt1 << Summary(
Group( Box[j] ),
Freq( "None" ),
Weight( "None" ),
Link to original data table( 0 ),
output table name( "Sum " || Char( j ) )
);
Insert Into( mrj, newDT );
);
Re: ループを使用した JSL スクリプトと概要私は、Box が Box という名前のメモリ変数を参照していると仮定しました。この変数はリストであり、それぞれが変数の名前である複数の要素を含んでいます。 これがそうでない場合、Box とは何ですか?Re: ループを使用した JSL スクリプトと概要ありがとう、ジム。
リスト変数とタイプミスを追加する必要があることを理解しています。ただし、コードを更新して実行すると、このエラーが発生します。 私の列名は「Box 1」です。 「ボックス2」など
ただし、列名を Box1 、 Box 2 、 Box3 などに変更しようとしましたが、同じエラーが発生しました。助言がありますか?

Re: ループを使用した JSL スクリプトと概要// I am assuming that your syntax of
// nrj j = dt1 << Summary(
// was an attempt to create a pointer to each new data table
// being created in the Loop, one for each column in the list
// of columns called "Box"
// To do that, one needs to create a new List variable, and then
// populate the list by inserting the new data table reference
// by using an "Insert Into()" on each loop
// Create a list variable to hold the data table references
mrj = {};
For( j = 1, j < 3, j++,
newDT = dt1 << Summary(
// Your reference to the list variable called "Box"
// Group( Box(i) ),
// incorrect for 2 reasons. 1. When referencing a
// subscript, it is done using square brackets [ ],
// 2. the index variable you are specifying is "i",
// while the index variable for your For() loop is
// a the variable "j"
Group( Box[j] ),
Freq( "None" ),
Weight( "None" ),
Link to original data table( 0 ),
output table name( "Sum " || Char( j ) )
);
Insert Into( mrj, newDT );
);