Select rows with maximal values in one columnI 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!Re: Select rows with maximal values in one columnHello, 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<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Fantastic solution. This is exactly what I was looking for!
Re: Select rows with maximal values in one columnYou can also use GET ROWS WHERE:
yourarray = dt << get rows where(:columnname == peakvalue);
The advantage of get rows where is that a) it's one step and not two, and b) no rows are selected in your table. If you need the selected rows then the approach shown by MOSFETtestEng will do the trick.
Re: Select rows with maximal values in one columnI 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;
Re: Select rows with maximal values in one columnI got JMP10 and revisited this problem. "Join" using column matching works well. I guess table "update" seems would be even more straightforward.
Re: Select rows with maximal values in one columnFor 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=""></SELECT>
Re: Select rows with maximal values in one columnThe 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.
DongRe: Select rows with maximal values in one columnSorry, 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 ) ) )
);
Re: Select rows with maximal values in one columnMS,
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.
DongRe: Select rows with maximal values in one columnJeff,
Thanks. This appears to be new feature from JMP 9. I am using JMP 7. I guess I may request an upgrade.
Also, I am trying to select multiple maximums in one column. The maximums belong to different groups specified in other columns.
DongRe: Select rows with maximal values in one columnRows->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.
JeffRe: Select rows with maximal values in one columnYou 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