cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Try the Materials Informatics Toolkit, which is designed to easily handle SMILES data. This and other helpful add-ins are available in the JMP® Marketplace
Choose Language Hide Translation Bar
PS_Ato
Level III

JSL script - How to create a column with repeating values?

Hi,

despite looking into many discussions / the scripting index .., I could not get an answer, how to write a JSL script, that will take over the new column command enabling to enter sequence data with N times repetition of each value. I know how to do it manually - thanks to a reply from Mark B... in one of those discussions, but I struggle to write a script

 

e.g. 

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,i++, seq);

//dt:run << set each value(for(i=1,i<N_DOE,i++, seq));

//dt << new column("Run", "numeric", "ordinal", values(repeat(seq));

//dt << new column("Run", "numeric", "ordinal", values(repeat(for(i=1,i<N_DOE,i++, seq))));

//dt << new column("Run", "numeric", "ordinal", for each row(for(i=1,i<N_DOE,i++, seq)));

//dt << new column("Run", "numeric", "ordinal", for each row(seq));
1 ACCEPTED SOLUTION

Accepted Solutions
txnelson
Super User

Re: JSL script - How to create a column with repeating values?

The Sequence() function really only works within a formula. Take a look at it in the Scripting Index

     Help==>Scripting Index.......Sequence

Here is a working example

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) || "));"
		)
	);
Jim

View solution in original post

2 REPLIES 2
txnelson
Super User

Re: JSL script - How to create a column with repeating values?

The Sequence() function really only works within a formula. Take a look at it in the Scripting Index

     Help==>Scripting Index.......Sequence

Here is a working example

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) || "));"
		)
	);
Jim
gzmorgan0
Super User (Alumni)

Re: JSL script - How to create a column with repeating values?

@PS_Ato, Jim, @txnelson  has already provided a solution.

 

The JMP functions, Sequence() and Count() are very cool functions when working with a data table, since both functions rely on the Row() of the current data table.

 

There might be times when you want the sequence in just a matrix.  One method is the matrix function  Direct Product(amat, bmat) .  The script below is similar to your original script; it creates seq a vector of repeated values, then assigns them to the new column. 

 

This is provided as an FYI.  If you have not used matrices or studied linear algebra, this would not be the first function that might pop into your mind.

 

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]

*/