<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: How can I select rows based on multiple conditions for the same ID? in Discussions</title>
    <link>https://community.jmp.com/t5/Discussions/How-can-I-select-rows-based-on-multiple-conditions-for-the-same/m-p/739260#M92082</link>
    <description>&lt;P&gt;Here is one way you could approach this using Col-functions&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;Names Default To Here(1);

dt = New Table("Untitled 3",
	Add Rows(11),
	Compress File When Saved(1),
	New Column("ID", Numeric, "Continuous", Format("Best", 12), Set Values([1, 1, 1, 2, 3, 3, 4, 4, 4, 4, 4])),
	New Column("Category", Character, "Nominal", Set Values({"A", "A", "B", "A", "A", "C", "A", "A", "B", "B", "C"})),
	New Column("Date", Numeric, "Continuous", Format("Best", 12), Set Values([1, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1]))
);

dt &amp;lt;&amp;lt; New Column("KEEP", Numeric, Nominal, Formula(
	Col Sum(Row() == Col Min(Row(), :category, :id), :id) &amp;gt; 1 &amp;amp; :date == Col Max(:date, :category, :id)
));&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Change the formula to &amp;lt;&amp;lt; Select Where / &amp;lt;&amp;lt; Get Rows Where or use it with subset to take the rows you want to keep.&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jthi_0-1711515810659.png" style="width: 999px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/62715i6D030C466C9E7F90/image-size/large?v=v2&amp;amp;px=999" role="button" title="jthi_0-1711515810659.png" alt="jthi_0-1711515810659.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Edit:&lt;/P&gt;
&lt;P&gt;Original version didn't take into account that category 1 could be missing (this assumes that category is numerical column)&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;New Column("KEEP", Numeric, Nominal, Formula(
	Col Sum(Row() == Col Min(Row(), :category, :id), :id) &amp;gt; 1 
	&amp;amp; :date == Col Max(:date, :category, :id) 
	&amp;amp; Col Sum(If(:category == 1, 1, .), :id)
));
&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Wed, 27 Mar 2024 05:54:38 GMT</pubDate>
    <dc:creator>jthi</dc:creator>
    <dc:date>2024-03-27T05:54:38Z</dc:date>
    <item>
      <title>How can I select rows based on multiple conditions for the same ID?</title>
      <link>https://community.jmp.com/t5/Discussions/How-can-I-select-rows-based-on-multiple-conditions-for-the-same/m-p/739168#M92062</link>
      <description>&lt;P&gt;Hello, I need assistance in cleaning up some data. The data in the table contain multiple IDs, dates, and categories. I am interested in IDs with category 1 and 2, or 1 and 2 and 3, or 1 and 3, while retaining only the entries with the maximum date for each category. Could you please provide the best script for this solution? Thank you!&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;category&lt;/TD&gt;&lt;TD&gt;date&lt;/TD&gt;&lt;TD&gt;costA&lt;/TD&gt;&lt;TD&gt;costB&lt;/TD&gt;&lt;TD&gt;costC&lt;/TD&gt;&lt;TD&gt;costD&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1/21/16&lt;/TD&gt;&lt;TD&gt;5000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;3000&lt;/TD&gt;&lt;TD&gt;500&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1/21/16&lt;/TD&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;5000&lt;/TD&gt;&lt;TD&gt;10000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1/21/16&lt;/TD&gt;&lt;TD&gt;20000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1/22/16&lt;/TD&gt;&lt;TD&gt;3000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;50000&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;2/1/16&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;900&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;4/2/13&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;TD&gt;10000&lt;/TD&gt;&lt;TD&gt;5000&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;4/3/13&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;642.49&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;4/2/13&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;900&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;3/6/15&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;259.58&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
      <pubDate>Tue, 26 Mar 2024 15:58:35 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-can-I-select-rows-based-on-multiple-conditions-for-the-same/m-p/739168#M92062</guid>
      <dc:creator>doraemengs</dc:creator>
      <dc:date>2024-03-26T15:58:35Z</dc:date>
    </item>
    <item>
      <title>Re: How can I select rows based on multiple conditions for the same ID?</title>
      <link>https://community.jmp.com/t5/Discussions/How-can-I-select-rows-based-on-multiple-conditions-for-the-same/m-p/739190#M92066</link>
      <description>&lt;P&gt;Here is a little script that should work.&amp;nbsp; It finds the rows that meet your definition.&amp;nbsp; Those rows are then subsetted into a new table.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;Names Default To Here( 1 );
dt = Current Data Table();

For Each Row(
	If( :date == Col Maximum( :date, :ID ),
		currID = :ID;
		//currID="1"
		cats = Associative Array( dt:category[dt &amp;lt;&amp;lt; get rows where( :ID == currID )] ) &amp;lt;&amp;lt; get keys;
		If( cats[1] == "1" &amp;amp; Length( cats ) &amp;gt; 1,
			dt &amp;lt;&amp;lt; select rows( Row() )
		);
	)
);

dtNew = dt &amp;lt;&amp;lt; subset( selected columns(0), selected rows(1),
	output table("Final")
);

// The above code will allow multiple rows within a given ID, when there are 
// multiple rows with the same maximum date.  Run the below code to 
// get rid of the multiple entries, if that is what is desired

dtNew &amp;lt;&amp;lt; select duplicate rows(Match(:ID));
dtNew &amp;lt;&amp;lt; delete rows;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="txnelson_0-1711471791138.png" style="width: 400px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/62693i24A607FEDAD7E5C1/image-size/medium?v=v2&amp;amp;px=400" role="button" title="txnelson_0-1711471791138.png" alt="txnelson_0-1711471791138.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="txnelson_2-1711471846520.png" style="width: 400px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/62695i4A80C99507AB95AA/image-size/medium?v=v2&amp;amp;px=400" role="button" title="txnelson_2-1711471846520.png" alt="txnelson_2-1711471846520.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;If the last 2 lines of the above script are run, then the duplicate ID rows are deleted.&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="txnelson_3-1711471972582.png" style="width: 400px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/62696iBC67E8AD5F606EC4/image-size/medium?v=v2&amp;amp;px=400" role="button" title="txnelson_3-1711471972582.png" alt="txnelson_3-1711471972582.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 26 Mar 2024 16:52:59 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-can-I-select-rows-based-on-multiple-conditions-for-the-same/m-p/739190#M92066</guid>
      <dc:creator>txnelson</dc:creator>
      <dc:date>2024-03-26T16:52:59Z</dc:date>
    </item>
    <item>
      <title>Re: How can I select rows based on multiple conditions for the same ID?</title>
      <link>https://community.jmp.com/t5/Discussions/How-can-I-select-rows-based-on-multiple-conditions-for-the-same/m-p/739194#M92068</link>
      <description>&lt;P&gt;ello Jim,&lt;/P&gt;&lt;P&gt;Thank you for your help. I apologize for any confusion. I need each ID that must have category 1 and 2 and/or 3 in the final table. If there are repeated IDs with the same category, I need the row that has the maximum date. The table should be provided here. Thank you for your help in advance.&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;category&lt;/TD&gt;&lt;TD&gt;date&lt;/TD&gt;&lt;TD&gt;costA&lt;/TD&gt;&lt;TD&gt;costB&lt;/TD&gt;&lt;TD&gt;costC&lt;/TD&gt;&lt;TD&gt;costD&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1/21/16&lt;/TD&gt;&lt;TD&gt;20000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1/22/16&lt;/TD&gt;&lt;TD&gt;3000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;50000&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;4/2/13&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;TD&gt;10000&lt;/TD&gt;&lt;TD&gt;5000&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;4/3/13&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;642.49&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;3/6/15&lt;/TD&gt;&lt;TD&gt;3000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;817&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;3/6/15&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;259.58&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;3/6/15&lt;/TD&gt;&lt;TD&gt;10000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;710.16&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;3/6/15&lt;/TD&gt;&lt;TD&gt;5000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1087&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;3/16/15&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;326.7&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
      <pubDate>Tue, 26 Mar 2024 17:05:17 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-can-I-select-rows-based-on-multiple-conditions-for-the-same/m-p/739194#M92068</guid>
      <dc:creator>doraemengs</dc:creator>
      <dc:date>2024-03-26T17:05:17Z</dc:date>
    </item>
    <item>
      <title>Re: How can I select rows based on multiple conditions for the same ID?</title>
      <link>https://community.jmp.com/t5/Discussions/How-can-I-select-rows-based-on-multiple-conditions-for-the-same/m-p/739206#M92069</link>
      <description>&lt;P&gt;My example from above had Category as a character column.&amp;nbsp; Your example is numeric.&amp;nbsp; I also changed the logic to ensure that there is at least categories 1&amp;amp;2, 1&amp;amp;3 or 1&amp;amp;2&amp;amp;3&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;Names Default To Here( 1 );
dt = Current Data Table();

For Each Row(
	If( :date == Col Maximum( :date, :ID ),
		currID = :ID;
		cats = Associative Array( dt:category[dt &amp;lt;&amp;lt; get rows where( :ID == currID )] ) &amp;lt;&amp;lt; get keys;
		show(cats);
		If( Length( cats ) &amp;gt; 1,
			If( cats[1] == 1 &amp;amp; (cats[2] == 2 | cats[2] == 3),
				dt &amp;lt;&amp;lt; select rows( Row() )
			)
		);
	)
);

dtNew = dt &amp;lt;&amp;lt; subset( selected columns( 0 ), selected rows( 1 ), output table( "Final" ) );&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 26 Mar 2024 17:32:49 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-can-I-select-rows-based-on-multiple-conditions-for-the-same/m-p/739206#M92069</guid>
      <dc:creator>txnelson</dc:creator>
      <dc:date>2024-03-26T17:32:49Z</dc:date>
    </item>
    <item>
      <title>Re: How can I select rows based on multiple conditions for the same ID?</title>
      <link>https://community.jmp.com/t5/Discussions/How-can-I-select-rows-based-on-multiple-conditions-for-the-same/m-p/739260#M92082</link>
      <description>&lt;P&gt;Here is one way you could approach this using Col-functions&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;Names Default To Here(1);

dt = New Table("Untitled 3",
	Add Rows(11),
	Compress File When Saved(1),
	New Column("ID", Numeric, "Continuous", Format("Best", 12), Set Values([1, 1, 1, 2, 3, 3, 4, 4, 4, 4, 4])),
	New Column("Category", Character, "Nominal", Set Values({"A", "A", "B", "A", "A", "C", "A", "A", "B", "B", "C"})),
	New Column("Date", Numeric, "Continuous", Format("Best", 12), Set Values([1, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1]))
);

dt &amp;lt;&amp;lt; New Column("KEEP", Numeric, Nominal, Formula(
	Col Sum(Row() == Col Min(Row(), :category, :id), :id) &amp;gt; 1 &amp;amp; :date == Col Max(:date, :category, :id)
));&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Change the formula to &amp;lt;&amp;lt; Select Where / &amp;lt;&amp;lt; Get Rows Where or use it with subset to take the rows you want to keep.&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jthi_0-1711515810659.png" style="width: 999px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/62715i6D030C466C9E7F90/image-size/large?v=v2&amp;amp;px=999" role="button" title="jthi_0-1711515810659.png" alt="jthi_0-1711515810659.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Edit:&lt;/P&gt;
&lt;P&gt;Original version didn't take into account that category 1 could be missing (this assumes that category is numerical column)&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;New Column("KEEP", Numeric, Nominal, Formula(
	Col Sum(Row() == Col Min(Row(), :category, :id), :id) &amp;gt; 1 
	&amp;amp; :date == Col Max(:date, :category, :id) 
	&amp;amp; Col Sum(If(:category == 1, 1, .), :id)
));
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 27 Mar 2024 05:54:38 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-can-I-select-rows-based-on-multiple-conditions-for-the-same/m-p/739260#M92082</guid>
      <dc:creator>jthi</dc:creator>
      <dc:date>2024-03-27T05:54:38Z</dc:date>
    </item>
  </channel>
</rss>

