cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
The Discovery Summit 2025 Call for Content is open! Submit an abstract today to present at our premier analytics conference.
Get the free JMP Student Edition for qualified students and instructors at degree granting institutions.
Choose Language Hide Translation Bar
View Original Published Thread

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

MuttonChops
Level III

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