- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
JSL: Save report by group into tabs
I am trying write a script that saves a report by groups into tabs. As an example let's consider a bivariate analysis of height vs weight in the Big Class example data set. I would like to carry out that analysis by column sex and output the analysis for :sex == "F" in one tab and :sex == "M" in another. Now this should of course work with any number of value levels in the groupby column. The only thing I can think of doing is to subset the datatable but then I end up with a bunch of data tables that I cannot close without loosing my report. Any suggestions on how to do this without subsetting?
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: JSL: Save report by group into tabs
Here is one way of doing it
names default to here(1);
dt=open("$SAMPLE_DATA/big class.jmp");
// Generate the output in an invisible space
biv = dt << Bivariate( invisible, Y( :height ), X( :weight ), By( :sex ) );
// Create the window, with the first tab
nw=New Window("Tabs", text box("here are the tabs"), tb = Tab Box((report(biv[1])[outlinebox(1)])<<get title ,report(biv[1])));
// Generate the remaining tabs
For( i = 2, i <= N Items( biv ), i++,
tb << Insert( i, (report(biv[i])[outlinebox(1)])<<get title, Report( biv[i] ) )
);
// Close the invisible output
biv<<close window;
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: JSL: Save report by group into tabs
When you create a By() group, JMP is creating a set of subset tables for you automatically. You can also do this on a level-by-level basis by using Where() clauses instead.
Here is a script that creates tabs per level, and as a bonus they are moveable and dockable, so they behave like a JMP Dashboard and can be rearranged in a variety of ways.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
//get the unique levels
Summarize( dt, unique_values = by( :sex ) );
// Create the window with an empty tab list
nw = New Window( "Tabs", tb = Tab Box( <<Dockable( 1 ) ) );
// Generate tabs, one per level
For( i = 1, i <= N Items( unique_values ), i++,
tb << Append(
Tab Page Box(
Title( ":sex = " || unique_values[i] ),
dt << Bivariate( invisible, Y( :height ), X( :weight ), Where( :sex == unique_values[i] ) ),
<<Moveable( 1 ),
<<Closeable( 1 )
)
)
);
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: JSL: Save report by group into tabs
Here is one way of doing it
names default to here(1);
dt=open("$SAMPLE_DATA/big class.jmp");
// Generate the output in an invisible space
biv = dt << Bivariate( invisible, Y( :height ), X( :weight ), By( :sex ) );
// Create the window, with the first tab
nw=New Window("Tabs", text box("here are the tabs"), tb = Tab Box((report(biv[1])[outlinebox(1)])<<get title ,report(biv[1])));
// Generate the remaining tabs
For( i = 2, i <= N Items( biv ), i++,
tb << Insert( i, (report(biv[i])[outlinebox(1)])<<get title, Report( biv[i] ) )
);
// Close the invisible output
biv<<close window;
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: JSL: Save report by group into tabs
I was successfully able to create a report with tabs with some of the code provided by TxNelson (Thank you Tx !)
Unfortunately when I save the report as an HTML file the tabs are not saved (nor are spacer boxes)
In the case below, I am not getting anything in the html file... Any suggestions are appreciated
nw = New Window( "Example",
tb = Tab Box(
Tab Page Box( "First Tab", Tip( "First Tab Tooltip" ), Button Box( "Press One" ) ),
Tab Page Box( "Second Tab", Closeable( 1 ), Button Box( "Press Two" ) ),
Tab Page Box( "Third Tab", Icon( "Nominal" ), Button Box( "Press Three" ) )
)
);
Wait( 1 );
tb << Add( "Fourth Tab", Button Box( "Press Four" ) );
nw << Journal;
Current Journal() << Save HTML( "C:\_Jens\Test Report.html" );
Web( "C:\_Jens\Test Report.html" );
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: JSL: Save report by group into tabs
From my experience, you will only get the tabs if you save window as an Interactive HTML. In turn that requires the display not be saved from a journal, since journals do not have the Save Interactive HTML capability
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: JSL: Save report by group into tabs
Thank you for clarifying.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: JSL: Save report by group into tabs
After running the script, i can not find analysis output in Tab2. Can you let me know why? Thanks.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: JSL: Save report by group into tabs
Jim, Thank you for your script. I used your jsl as is, I am able to create the tabs , but my 2nd tab is blank. Do you have any idea why this might be happening? Any help will be appreciated
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: JSL: Save report by group into tabs
I suspect you are running JMP 13 or earlier. The code only works for JMP 14 or above.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: JSL: Save report by group into tabs
When you create a By() group, JMP is creating a set of subset tables for you automatically. You can also do this on a level-by-level basis by using Where() clauses instead.
Here is a script that creates tabs per level, and as a bonus they are moveable and dockable, so they behave like a JMP Dashboard and can be rearranged in a variety of ways.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
//get the unique levels
Summarize( dt, unique_values = by( :sex ) );
// Create the window with an empty tab list
nw = New Window( "Tabs", tb = Tab Box( <<Dockable( 1 ) ) );
// Generate tabs, one per level
For( i = 1, i <= N Items( unique_values ), i++,
tb << Append(
Tab Page Box(
Title( ":sex = " || unique_values[i] ),
dt << Bivariate( invisible, Y( :height ), X( :weight ), Where( :sex == unique_values[i] ) ),
<<Moveable( 1 ),
<<Closeable( 1 )
)
)
);
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: JSL: Save report by group into tabs
Thanks, both of you! Both solutions worked like a charm.