cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
JMP is taking Discovery online, April 16 and 18. Register today and join us for interactive sessions featuring popular presentation topics, networking, and discussions with the experts.
Choose Language Hide Translation Bar
abdulj
Level IV

How to create variable names depending on loop number

Hello

I am trying to create variables dynamically depending on the number of times my loop runs. How can I go about doing this?

Example

for(i=1, i<x, i++,

    

     //some code goes here

    

     var || i = current data table();   //This obviously does not work, but I hope you get the idea. I would eventually like to have var1, var2, var3, etc... till the loop is done

    

     )

Does this make sense?

thanks

1 ACCEPTED SOLUTION

Accepted Solutions
michaelhaslam_p
Level III

Re: How to create variable names depending on loop number

Abdulj,

 

Here is one way using Eval ( Substitute ( ))

 

// dv = dummy variable
x = 10;
For( i = 1, i <= x, i++,
	Eval(
		Substitute(
				Expr(
					dv_variable = i;
					Show( dv_variable );
				),
			Expr( dv_variable ), Parse( "Variable Name " || Char( i ) )
		)
	)
);

 

Michael

View solution in original post

8 REPLIES 8
michaelhaslam_p
Level III

Re: How to create variable names depending on loop number

Abdulj,

 

Here is one way using Eval ( Substitute ( ))

 

// dv = dummy variable
x = 10;
For( i = 1, i <= x, i++,
	Eval(
		Substitute(
				Expr(
					dv_variable = i;
					Show( dv_variable );
				),
			Expr( dv_variable ), Parse( "Variable Name " || Char( i ) )
		)
	)
);

 

Michael

Byron_JMP
Staff

Re: How to create variable names depending on loop number

Wasn't there a talk on this at the Advanced Scripting Panel discussion at the JMP Discovery conference Last week? It was a great seminar, I wonder if the author posted any notes on his talk.

JMP Systems Engineer, Health and Life Sciences (Pharma)
David_Burnham
Super User (Alumni)

Re: How to create variable names depending on loop number

Here is an alternate notation:

For( i = 1, i <= x, i++,
	Eval( Parse( Eval Insert( "\[
        var^i^ = Current Data Table()
    ]\" ) ) )
) 

-Dave

-Dave

Re: How to create variable names depending on loop number

Dave,

I've never seen that syntax before, do the ^ surround any variable to include in text?  I would have written:

tmp = "var" || char(i) || " = Current Data Table()";

eval(parse(tmp))

This is obviously less efficient than what you've written.

David_Burnham
Super User (Alumni)

Re: How to create variable names depending on loop number

Yes enclose each variable with ^ ... ^ and have the jsl statement enclosed in the Eval( Parse( Eval Insert("\[ ...  ]\"))) pattern.

For example, the following code sets spec limits for a column:

Open("$SAMPLE_DATA/Big Class.jmp");

cHeight = Column("height");

Column("height") << Set Property( "Spec Limits", {LSL(55), USL(75), Target(65)} );

Let's say we have the following variable assignments that we would like to use:

colName = "height";

lower = 55;

upper = 75;

target = 40;

Then we can write:

Eval( Parse( Eval Insert("\[

  Column("^colName^") << Set Property( "Spec Limits", {LSL(^lower^), USL(^upper^), Target(^target^)} );

]\")))

-Dave

-Dave
abdulj
Level IV

Re: How to create variable names depending on loop number

thanks guys!

KinKame
Level IV

Re: How to create variable names depending on loop number

oh nice .... thank you very much. Another thing I need to learn in JMP ...

Re: How to create variable names depending on loop number

Why create a new variable for each reference? Why not store the data table reference in a list for access by index or an associative array for access by key?