Subscribe Bookmark RSS Feed

How do I add a filter column as a AND criteria

clarencelew

Community Trekker

Joined:

Apr 17, 2015

The syntax for Add Filter dictates that the new columns must be in the OR criteria.

Is there some way I can add rules in an iterative way?

dtf<<Add Filter(columns(column <,col>), <Where(clause)>)

Add one or more filter columns in a new OR group.

11 REPLIES
pmroz

Super User

Joined:

Jun 23, 2011

To figure this out:

Create a graph using Big Class

Add a local data filter with 2 variables (e.g. age and sex) using the AND button

Select criteria from both variables in the filter

Click the red triangle and select Script > Copy Script

Here's an example that shows the necessary syntax:

dt = open("$sample_data/Big Class.jmp");

// AND

Graph Builder(

     Show Control Panel( 0 ),

     Variables( X( :weight ), Y( :height ) ),

     Elements(

           Points( X, Y, Legend( 1 ), Jitter( 1 ) ),

           Smoother( X, Y, Legend( 3 ) )

     ),

     Local Data Filter(

           Location( {935, 334} ),

           Mode( Select( 0 ), Show( 1 ), Include( 1 ) ),

           Add Filter(

                columns( :age, :sex ),

                Where( :age == {12, 13, 14} ),

                Where( :sex == "M" )

           )

     )

);

clarencelew

Community Trekker

Joined:

Apr 17, 2015

Hi PMroz,

Appreciate the response. But what I'm trying to achieve here is to add a filter to the current one after I've done some other crunching..



dt = open("$sample_data/Big Class.jmp");

  

gb = Graph Builder(

  Show Control Panel( 0 ),

  Variables( X( :weight ), Y( :height ) ),

  Points( X, Y, Legend( 1 ), Jitter( 1 ) ),

  Smoother( X, Y, Legend( 3 ) )

   ),

  Location( {935, 334} ),

  Mode( Select( 0 ), Show( 1 ), Include( 1 ) ),

  columns( :age, :sex ),

  Where( :age == {12, 13, 14} )

   //Where( :sex == "M" )

);

//do something else here...


gb << Add Filter(

  columns( :sex ),

  Where( :sex == "M" )

);



chungwei

Staff

Joined:

Jun 23, 2011

Is this what you have in mind ?

dt = open("$sample_data/Big Class.jmp");

// AND

gb = Graph Builder(

     Show Control Panel( 0 ),

     Variables( X( :weight ), Y( :height ) ),

     Elements(

           Points( X, Y, Legend( 1 ), Jitter( 1 ) ),

           Smoother( X, Y, Legend( 3 ) )

     ),

);

df = gb << Local Data Filter(

           Mode( Select( 0 ), Show( 1 ), Include( 1 ) ),

           Add Filter(

                columns( :age ),

                Where( :age == {12, 13, 14} ),

           )

     )

df << Add Filter(

                columns( :sex ),

                Where( :sex == "M" ),

           )


jimloughlin

Community Trekker

Joined:

Jun 23, 2011

are you missing a semi-colon (;) between the two df statements?

clarencelew

Community Trekker

Joined:

Apr 17, 2015

Hi Chung Wei,

That would only add the criteria as an OR condition not AND...

chungwei

Staff

Joined:

Jun 23, 2011

sorry. I did not ask the question correctly.

I meant to ask if you would like to send separate messages to the data filter, instead of the way PMRoz showed.

newbie_alex

Contributor

Joined:

May 18, 2017

I have the same issue. is there a way to add an AND filter instead of an OR filter (which was already shown by staff member chungwei)?
ian_jmp

Staff

Joined:

Jun 23, 2011

Using Chung-Wei's example:

dt = Open( "$sample_data/Big Class.jmp" );
// AND
gb = Graph Builder(
	Show Control Panel( 0 ),
	Variables( X( :weight ), Y( :height ) ),
	Elements( Points( X, Y, Legend( 1 ), Jitter( 1 ) ), Smoother( X, Y, Legend( 3 ) ) ),

);
Wait( 3 );
// OR
df = gb << Local Data Filter(
	Add Filter( columns( :age ) ),
	Add Filter( columns( :sex ) )
);
Wait( 3 );
// AND
df << removeLocalDataFilter;
df = gb << Local Data Filter(
	Add Filter( columns( :age, :sex ) )
);
newbie_alex

Contributor

Joined:

May 18, 2017

Thank you for the quick reply. That will work.

 

Is there also a way to define the list of filter columns in a List variable and forward this to the filter (the name of my filter columns are dynamic)?

 

e.g.

filter_vars = {"age","sex"};

 

and somehow use filter_vars as an input for the data filter (instead of columns(:age,:sex))