こんにちは、
多くのディスカッションやスクリプトインデックスを調べたにも関わらず、新しい列コマンドを引き継いで各値を N 回繰り返すシーケンスデータを入力できる JSL スクリプトの書き方についての答えは得られませんでした。ディスカッションの 1 つで Mark B からの返信のおかげで、手動で行う方法は知っていますが、スクリプトを書くのに苦労しています
例えば
N_DOE= 10
N_XRF =4
=> {1,1,1,1,2,2,2,2,3,3,3,3, ...10,10,10,10}
//How may I get a column with repeating values
dt=current data table();
N_DOE=10;
N_XRF=4;
seq = sequence(1,N_DOE,1,N_XRF);
dt << new column("Run", "numeric", "ordinal");
//dt:run << set each value(seq,); // this works, but it is just"1" for all rows
dt:run << set each value(i=1,i<N_DOE></N_DOE>@PS_Ato 、Jim、 @txnelsonがすでに解決策を提供しています。
JMP 関数であるSequence()とCount() は、どちらの関数も現在のデータ テーブルのRow()に依存しているため、データ テーブルを操作する場合に非常に優れた関数です。
シーケンスを行列だけで表示したい場合があります。 1 つの方法は、行列関数Direct Product(amat, bmat)です。以下のスクリプトは、元のスクリプトに似ています。繰り返される値のベクトルであるseqを作成し、それらを新しい列に割り当てます。
これは参考までに提供されています。行列を使用したことがない、または線形代数を勉強したことがない場合、これは最初に頭に浮かぶ関数ではないでしょう。
Names Default to Here(1);
N_DOE=10;
N_XRF=4;
New Table("Dummy", add rows(N_DOE * N_XRF));
dt=current data table();
seq = Transpose(Direct Product(Index(1,N_DOE),J(1,N_XRF,1)));
dt << new column("Run", "numeric", "ordinal", values(seq));
/* Log output
seq = Transpose(Direct Product(Index(1,N_DOE),J(1,N_XRF,1)));
[1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7,
8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10]
*/
Sequence() 関数は実際には数式内でのみ機能します。スクリプトインデックスで見てみましょう
ヘルプ==>スクリプト索引....シーケンス
これが実際の例です
names default to here(1);
dt=open("$SAMPLE_DATA/big class.jmp");
N_DOE=10;
N_XRF=4;
dt << new column("Run", "numeric", "ordinal");
// Create the JSL required to set the format and then
// execute it
Eval( Parse(
"dt:run << set formula( sequence(1, " || char(N_DOE) ||
", ince = 1, n = " || char(N_XRF) || "));"
)
);