Subscribe Bookmark RSS Feed

Select a Group of Columns based on the Group Name in JSL

spartans5143

Community Trekker

Joined:

Sep 3, 2013

Hello all,

I am writing a script that fits a neural net to the currently selected column of a data table.  I am currently hard coding the input columns in the JSL script, but to make it more easily transferable, I would like to have it use a group of columns that the user would name in the data table as the inputs.

To do this, I need to be able to select a group of columns based on the name given to the group, but I cannot figure out how to do it in JSL.  For example, in my case, I would like to group my input columns into a group named "Inputs" on the data table and then have the script find the columns named "Inputs" and select them.  The scripting guide discusses selecting columns based on position or their name, but it doesn't seem to mention how to select a group by the name you gave it on the data table.

Thanks for your help

Dennis

1 ACCEPTED SOLUTION

Accepted Solutions
Solution

I don't know of a direct way to access the group name by JSL. One possible idea for a workaround is to dig out the name from the JSL-version of the table (i.e. dt<<get script).

Here's an example that seems to work:

//Open example table and make two groups of columns and name one "Inputs"

dt = Open( "$SAMPLE_DATA/Big Class.jmp" );

dt << Group Columns( "Inputs", height, 2 );

dt << Group Columns( :name, 2 );

//Select columns in group "Inputs"

t = dt << get script;

col_names = dt << get column names( string );

c = 0;

While( c >= 0,

  If( Arg( Arg( t, N Arg( t ) - c ), 1 ) == "Inputs",

       first_col = Char( Arg( Arg( t, N Arg( t ) - c ), 2 ) );

       group_size = Arg( Arg( t, N Arg( t ) - c ), 3 );

       first_col_nr = Contains( col_names, first_col );

       For( i = first_col_nr, i <= first_col_nr + group_size - 1, i++,

            Column( i ) << set selected( 1 )

            );

       c = -1;

       ,

       c++

       )

);

// make a list of the columns to use in further analyses...

Inputs_list = dt << get selected columns;

2 REPLIES
Solution

I don't know of a direct way to access the group name by JSL. One possible idea for a workaround is to dig out the name from the JSL-version of the table (i.e. dt<<get script).

Here's an example that seems to work:

//Open example table and make two groups of columns and name one "Inputs"

dt = Open( "$SAMPLE_DATA/Big Class.jmp" );

dt << Group Columns( "Inputs", height, 2 );

dt << Group Columns( :name, 2 );

//Select columns in group "Inputs"

t = dt << get script;

col_names = dt << get column names( string );

c = 0;

While( c >= 0,

  If( Arg( Arg( t, N Arg( t ) - c ), 1 ) == "Inputs",

       first_col = Char( Arg( Arg( t, N Arg( t ) - c ), 2 ) );

       group_size = Arg( Arg( t, N Arg( t ) - c ), 3 );

       first_col_nr = Contains( col_names, first_col );

       For( i = first_col_nr, i <= first_col_nr + group_size - 1, i++,

            Column( i ) << set selected( 1 )

            );

       c = -1;

       ,

       c++

       )

);

// make a list of the columns to use in further analyses...

Inputs_list = dt << get selected columns;

spartans5143

Community Trekker

Joined:

Sep 3, 2013

That works great.  Thanks for your help.