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.
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