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
mikedriscoll
Level VI

How do I conditionally set data type for new column in JSL?

Hi, How can I conditionally and programmatically set a data type for a new column? I have a workaround that covers numeric / character, and it could be extended for other types, but I'm trying to get the method below (marked 'not working') to work. The log shows it is not recognizing the type variable. I've tried a few things like parse() but have been so far unsuccessful.

 

Names Default To Here( 1 );

dt = open( "$SAMPLE_DATA\Big Class.jmp");

colType = column(dtData,"Name") << get data type;

// doesn't work, error on colType
dt << add multiple columns("New Column", 1, After("Name"), colType);

// works
dt << add multiple columns("New Column", 1, After("Name"), Numeric);
if(colType == "Character", column(dt, "New Column") << data type ("Character"));

 

Thanks,

Mike

2 ACCEPTED SOLUTIONS

Accepted Solutions
txnelson
Super User

Re: How do I conditionally set data type for new column in JSL?

This will do the trick for you

Eval(
	Substitute(
			Expr(
				dt << add multiple columns( "New Column", 1, After( "Name" ), __coltype__ )
			),
		Expr( __colType__ ), Parse( coltype )
	)
)
Jim

View solution in original post

Re: How do I conditionally set data type for new column in JSL?

Thank you for reporting this issue. The original post revealed a defect within JSL. A few clever solutions were offered, which were great workarounds. I can report now that in JMP 14, the original code (marked "doesn't work" in the example script) now works correctly and as expected. 

View solution in original post

6 REPLIES 6
txnelson
Super User

Re: How do I conditionally set data type for new column in JSL?

This will do the trick for you

Eval(
	Substitute(
			Expr(
				dt << add multiple columns( "New Column", 1, After( "Name" ), __coltype__ )
			),
		Expr( __colType__ ), Parse( coltype )
	)
)
Jim
mikedriscoll
Level VI

Re: How do I conditionally set data type for new column in JSL?

Thanks Jim. That works well. The eval(substitute(expr(...))) has always confused me as to when to use it because it seems an overcomplicated way of getting the variable where it needs to go. Is it fair to say that it is always needed if I'm trying to put a variable into such an expression? 

 

Thanks,

Mike

 

txnelson
Super User

Re: How do I conditionally set data type for new column in JSL?

You are correct.  This is typically the best way to populate expressions

Jim
mikedriscoll
Level VI

Re: How do I conditionally set data type for new column in JSL?

Thanks!

Re: How do I conditionally set data type for new column in JSL?

Thank you for reporting this issue. The original post revealed a defect within JSL. A few clever solutions were offered, which were great workarounds. I can report now that in JMP 14, the original code (marked "doesn't work" in the example script) now works correctly and as expected. 

mikedriscoll
Level VI

Re: How do I conditionally set data type for new column in JSL?

Thanks!