cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
JMP is taking Discovery online, April 16 and 18. Register today and join us for interactive sessions featuring popular presentation topics, networking, and discussions with the experts.
Choose Language Hide Translation Bar
new-jmper
Level III

Select rows with maximal values in one column

I can use summary to find the maximums (multiple due to groups) in one column. However, I also want to look up in which rows in the original table the maximums occur.

Is there an easy solution? Thanks for your help!
1 ACCEPTED SOLUTION

Accepted Solutions

Re: Select rows with maximal values in one column

I know this is two years later, but this is for all those who found this post with the same question.

Try the function "Get Selected Rows" in your script.

 

yourarray = dt << Get Selected Rows;

 

Now the array "yourarray" will contain a list of the row numbers that are selected.

 

To find the rows with the maximum value, try

 

// finds the maximum value in the columnt
peakvalue = Col Max( :columname); 

// selects all rows with the maximum value. (dt is the name of the data table.)
dt << Select Where( :columnname == peakvalue);

 // stores a list of the row numbers with the maximum value in this array
yourarray = dt << Get Selected Rows;    

 

View solution in original post

12 REPLIES 12
ms
Super User (Alumni) ms
Super User (Alumni)

Re: Select rows with maximal values in one column

You can match the original table with the summary table using Update (Tables menu) with group column(s) = group column(s) and data = max(data) as matching columns. The maximum rows will be denoted by non-missing cells in the added NRows column.

My first answer was based on sloppy thinking...


Message was edited by: MS
new-jmper
Level III

Re: Select rows with maximal values in one column

MS,

Thanks. I gave it a try and I am still selecting all rows in the original table when selecting the 2nd summary table. Whenever I select one row (Max for the group) in the summary table, every row in the first summary table in the group also gets selected.

I hope I am following your instruction correctly. Is the 2nd summary table named as "DataTable By (group, data) By (group)" ?

FYI, I am using JMP7.

Dong
ms
Super User (Alumni) ms
Super User (Alumni)

Re: Select rows with maximal values in one column

Sorry, you´re right. I was too quick to answer. I will edit my erroneous post above

What I wanted to suggest is that you can try to combine Summary with Update (or Join, I am not sure Update is found in the JMP7 Tables Menu).

Here's a script example that should work but may be ineffective for very large data tables.

dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << clear select;
Summarize( g = by( :sex ), m = Max( :age ) );
For( j = 1, j <= N Items( g ), j++,
	For Each Row( If( :sex == g[j] & :age == m[j], Row State() = Selected State( 1 ) ) )
);
new-jmper
Level III

Re: Select rows with maximal values in one column

The script looks good. I will give it a try and report back.

What surprised me is that JMP itself does not keep the index (row number) of the data maximum somewhere.

Dong
Jeff_Perkinson
Community Manager Community Manager

Re: Select rows with maximal values in one column

For Each Row() can be inefficient for large tables.

Select Where() will probably be faster:

dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << clear select;
Summarize( g = by( :age ), m = Max( :height ) );

dt<<Select Where(:height==m[loc(g,char(:age) )]);
-Jeff
mak
mak
Level I

Re: Select rows with maximal values in one column

Hello, sorry to reply to an old thread, but I cannot find relevant examples elsewhere.

I would like to summarize by group, then select those rows that have max weight by group.

 

I was able to Summarize, but I don't know how to select those rows.

 

 

dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << clear select;
Summarize( g = by( :age, :sex ), m = Max( :weight ) );

/* How to select those rows summarized by group?

 

Thank you

Re: Select rows with maximal values in one column

Fantastic solution. This is exactly what I was looking for!

new-jmper
Level III

Re: Select rows with maximal values in one column

I got JMP10 and revisited this problem.  "Join" using column matching  works well.  I guess table "update" seems would be even more straightforward.

Jeff_Perkinson
Community Manager Community Manager

Re: Select rows with maximal values in one column

Rows->Row Selection->Select Dominant will select the rows with the maximum (or minimum) values in a column or group of columns.

I believe that'll get you what you're looking for.

Jeff
-Jeff