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
Idokol
Level II

Efficient formula

Hey,

I have big data table (~30million rows*20 columns) and this Pass/Fail test makes JMP stuck.

The PC is Windows 10 64-bit, i7-4770 @ 3.4Ghz, SSD and 32GB DDR3 1600Mhz.

The JSL is:

cctable << New Column( "New status", Character, Nominal, Formula( If( :result < :L | :result > :H, "Fail", "Pass" ) ) );

Can it be more efficient? Is there's a better choise in JMP to do it?

Thanks,

Ido

4 REPLIES 4
tom_abramov
Level V

Re: Efficient formula

Hi,

Don't use column formulas with such a table.

Try to run a calculation with JSL and paste the results.

Please see attached a table and a script I used.

 

Regards,

Tom. 

Idokol
Level II

Re: Efficient formula

Thanks, but the "New Column( ... )" command takes time and everything get's stuck as well.

I will try to use update/join

If you (or anyone else :) ) have a nother idea- I will glad to hear it.

Thanks.

Craige_Hales
Super User

Re: Efficient formula

 

My test takes 15 seconds to create the table and 15 seconds to add the extra column. I am using <<runFormulas to make the formula evaluate immediately rather than waiting for idle time.

 

start = Tick Seconds();
dt = New Table( "Untitled",
	Add Rows( 30e6 ),
	New Column( "L", Numeric, "Continuous", Format( "Best", 12 ), Formula( Random Integer( 1, 9 ) ) ),
	New Column( "result", Numeric, "Continuous", Format( "Best", 12 ), Formula( Random Integer( 1, 9 ) ) ),
	New Column( "H", Numeric, "Continuous", Format( "Best", 12 ), Formula( Random Integer( 1, 9 ) ) )
);
dt<<runformulas;
stop = Tick Seconds();
Show("create", stop - start, N Rows( dt ) );

start = Tick Seconds();
dt << New Column( "New status", Character, Nominal, Formula( If( :result < :L | :result > :H, "Fail", "Pass" ) ) );
dt << runformulas;
stop = Tick Seconds();
Show( "add", stop - start, N Rows( dt ) );

 

"create";
stop - start = 12.8833333333605;
N Rows(dt) = 30000000;
"add";
stop - start = 12.6833333332906;
N Rows(dt) = 30000000;

 

 

Formula addedFormula added

Craige
Idokol
Level II

Re: Efficient formula

Thanks!
I will do it.

 

Although what that helped the most was table of 1M * 100 rather then 80M * 5