cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Check out the JMP® Marketplace featured Capability Explorer add-in
Choose Language Hide Translation Bar
hogi
Level XII

Tips and Tricks - best practice with JMP/JSL

There is a wonderful blog post by @Craige_Hales : How Do You Draw a Circle? 

It nicely illustrates that there are multiple solutions to every problem - with varying degrees of success in achieving the goal and in investing ressources.

 

And often there is not the ONE solution with maximum points in all categories:

  • goal was met
  • length of code
  • speed (to write the code)
  • speed (to execute the code)
  • complexity (to understand the code)
  • complexity ( to remember the code)

 

Examples:

topicstandard approachfaster approacheslinks
General   
learn scriptingtrial and errorwatch the recordings of theJSL Scripters Club Meetings 
    
Data import   
open multiple data filesuse open()  (inside a for loop)use MFI
(faster csv reader!)
Open multiple Files
get a list of filesgenerate the file list - via Python, command prompt etc. and paste it into a new JMP tableMFI
→ right click on file list → Make into data table
 
find a file in a deep/complicated network tree structureuse MFI or Windows File dialogcreate a wrapper for Python/GLOB  
    
Data tables   
change column entriesstep by step via for loopdata table subscriptingData table subscripting
 ...

 dt << begin/end data update;
before/after the loop

Very slow loop behaviour
add columns to a data tablemerge data tables via Tables/Updatefirst aggregate via Tables/Summary
then merge via Tables/Update
Speed up Tables/Update
column aggregation
with restrictions (1)

the new approach via  Where (JMP18)
col Max(:weight,

:sex, where(:age==13))​

is easy to remember, but very slow

doesn't work yet.

use the old approach via If:

col Max(if(:age=13,:weight,.),

:sex)​

It looks more complicated but it's orders of magnitude faster *)
 

Col-Median-and-others:Where option 
column aggregation
with restrictions (2)

*) unfortunately, with a character comparison Col... gets very (!!!) slow:
col Max( if(:sex=="M", ...)

->use if(:sex2==1,...)

How-do-I-use-the-Col-Maximum-Formula-with-a-where  
 

... 

replace :sex=="M"
with contains(:sex,"M")

How-do-I-use-the-Col-Maximum-Formula-with-a-where
 count wordse.g. count xxx in :col:
N Rows(loc(Words(:col),"xxx"))

(Length(:col)-

Length(Substitute(:col, "xxx", ""))

)/3​

 

Count number of occurrences of specific words in a string

rank unique


New Column( "rank_unique",

Formula( Col Minimum(

Col Rank( If(

Row() == Col Min( Row(),

:age, :sex ), 1 ), :age ),

:age,:sex)) 

support this wish with a Kudo: 

 

Add dense ranking to Ranking Tie and Col Rank functions

Recode hogi_0-1730275949272.png

can be very slow in combination with other options

apply the option in a second step

Recode - Parse as Number

replace values with other valuesfor loop or Recodeuse DataTable subscriptingReplace missing values with 0
Should you Loop through a data table or use Recode, or use Get Rows Where to change values in a data...
select rows based on a formulaIf dt << select where() is too slow
... split it into 2 steps:

myrows= dt << get rows where();

dt << select rows(myrows)

Formula to check if any of a list of items is contained in the rows of a column
spec calcualationssome manual JSL codesupport this wish with a Kudo: 🙏 is in spec (value)
    
Graphs   
    
    
Reports   
    
    
Export   
    
    
    
Database access   
    
    
    
Neural Networks   
    
    
    
...   
    

 

 

[More Topic Containers like this]

1 ACCEPTED SOLUTION

Accepted Solutions
hogi
Level XII

Re: Speeding up JMP/JSL

-> Table moved to main post.

View solution in original post

6 REPLIES 6
jthi
Super User

Re: Speeding up JMP/JSL

It depends a lot on what you are doing. Some good general tips can be found from Scripting Guide > Efficient Scripts 

-Jarmo
hogi
Level XII

Re: Speeding up JMP/JSL

Thanks, a good place to start ...

 

Going further, how about a list with as many entries as possible along the idea:
If you want to do this, you probably thought of this approach - but concerning speed, the other approach is much better!

 

Who is interested in sharing his secrets

hogi
Level XII

Re: Speeding up JMP/JSL

-> Table moved to main post.

hogi
Level XII

Re: Speeding up JMP/JSL

I added a cool trick to count words by @ian_jmp :
Count number of occurrences of specific words in a string 

hogi
Level XII

Re: Speeding up JMP/JSL

hogi
Level XII

Re: Speeding up JMP/JSL

Wonderful talk on XPath & Subscripting in Reports:
 https://community.jmp.com/t5/Abstracts/I-Can-See-It-How-Do-I-Get-It/ev-p/776041