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
MuttonChops
Level III

Evaluating a variable column list as a string and inserting into a new column formula

I've created a variable that is a string of column names.  This is inside a FOR loop so it will change with each loop.

Here is a sample table for demonstration, in reality my table is about 400 columns with weird names.  I'm trying to group columns that should be grouped and report the max value. 99.9% of the time there will only be 1 value per row for each 'like' column that is to be grouped.

Col1Col2Col3
22  
 22 
  32
 32 
1  
  56
 34 

 

This first part is a loop that generates a variable column list.  I don't have all the code here but here is a summary.  This works so I don't want to bog down the discussion in this.

 

VarCols = functional code here and the output is a string with this format: {"col1", "col2", "col3"}

 

Then my code is supposed to create a new column named 'VarName' (defined in another part of the loop) then insert a formula that reports the max value of whichever columns are in VarCols.  But I just can't get it to evaluate.  Am I doing this way wrong?

 

DT << New Column(VarName, Numeric, "Continuous", formula(Maximum(columns(eval(VarCols)))));

Here is the specific error though i inserted the variable column name to avoid confusion:

Column VarName Formula Interrupted
Name Unresolved: columns 1 times At rows: 2 Operation: columns, columns( Eval( VarCols) ) /*###*/
Formula evaluation errors have been ignored

 

1 ACCEPTED SOLUTION

Accepted Solutions
txnelson
Super User

Re: Evaluating a variable column list as a string and inserting into a new column formula

Another community member may have a more efficient piece of code, but here is how I would code your request

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
VarCols = {"NPN1", "PNP2", "NPN2"};

VarName = "NewCol";

// Create the JSL required to generate the new column
theExpr = "DT << New Column(VarName, Numeric, Continuous, formula(Maximum(:" || VarCols[1];
For( i = 2, i <= N Items( VarCols ), i++,
	theExpr = theExpr || ",:" || VarCols[i]
);
theExpr = theExpr || ")));";
// Run the generated JSL
Eval( Parse( theExpr ) );
Jim

View solution in original post

4 REPLIES 4
txnelson
Super User

Re: Evaluating a variable column list as a string and inserting into a new column formula

Another community member may have a more efficient piece of code, but here is how I would code your request

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
VarCols = {"NPN1", "PNP2", "NPN2"};

VarName = "NewCol";

// Create the JSL required to generate the new column
theExpr = "DT << New Column(VarName, Numeric, Continuous, formula(Maximum(:" || VarCols[1];
For( i = 2, i <= N Items( VarCols ), i++,
	theExpr = theExpr || ",:" || VarCols[i]
);
theExpr = theExpr || ")));";
// Run the generated JSL
Eval( Parse( theExpr ) );
Jim
MuttonChops
Level III

Re: Evaluating a variable column list as a string and inserting into a new column formula

That worked, thanks @txnelson 

SimFred
Level I

Re: Evaluating a variable column list as a string and inserting into a new column formula

Long time fan. First time I actually need to post to get a question answered.

 

This is great. I just managed to get to that same point in my code. The next step is to inser this string into a function in a new column. 

dt << New Column( "MinValue", numeric, continuous, Formula( min(Eval( Parse( TheExpr)))));

but that is not working for me. Any help would be appreciated.

 

Please ignore. Brain was not working right late tonight...

txnelson
Super User

Re: Evaluating a variable column list as a string and inserting into a new column formula

Please provide the value of "TheExpr"

Jim