<?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 to delete pair rows which has same values in certain columns? in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/How-to-delete-pair-rows-which-has-same-values-in-certain-columns/m-p/798003#M313761</link>
    <description>&lt;P&gt;You might also want to look at&amp;nbsp;&lt;A href="https://go.documentation.sas.com/doc/en/pgmsascdc/9.4_3.5/lepg/p181g1p4bw3phkn1vt5p67xvynd5.htm" target="_self"&gt;FIRST. and LAST. DATA Step Variables&lt;/A&gt;&lt;/P&gt;</description>
    <pubDate>Wed, 23 Feb 2022 12:24:22 GMT</pubDate>
    <dc:creator>AMSAS</dc:creator>
    <dc:date>2022-02-23T12:24:22Z</dc:date>
    <item>
      <title>How to delete pair rows which has same values in certain columns?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-delete-pair-rows-which-has-same-values-in-certain-columns/m-p/797808#M313672</link>
      <description>&lt;P&gt;Hi everyone,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I need some help to solve this problem.&lt;/P&gt;&lt;P&gt;I've tried to make code in proc SQL, but it would be fine in basic SAS too.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have a table like below. (Actual data has about 90 columns.)&lt;/P&gt;&lt;P&gt;I want to delete rows that have the same size of L_price and P_price but have different ctype and ccnt in the same group by contract_repeat.&amp;nbsp;&lt;/P&gt;&lt;P&gt;(When ctype is new, ccnt is -1 and L_price and P_price have negative values.)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;(Original table)&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;rowN&lt;/TD&gt;&lt;TD&gt;contractNo&lt;/TD&gt;&lt;TD&gt;repeatNo&lt;/TD&gt;&lt;TD&gt;contract_repeat&lt;/TD&gt;&lt;TD&gt;cate&lt;/TD&gt;&lt;TD&gt;ctype&lt;/TD&gt;&lt;TD&gt;ccnt&lt;/TD&gt;&lt;TD&gt;L_tot_price&lt;/TD&gt;&lt;TD&gt;P_tot_price&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1555012&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;15550127&lt;/TD&gt;&lt;TD&gt;partial&lt;/TD&gt;&lt;TD&gt;cancel&lt;/TD&gt;&lt;TD&gt;-1&lt;/TD&gt;&lt;TD&gt;-700&lt;/TD&gt;&lt;TD&gt;-200&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1555012&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;15550127&lt;/TD&gt;&lt;TD&gt;partial&lt;/TD&gt;&lt;TD&gt;new&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2000&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1555017&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;15550178&lt;/TD&gt;&lt;TD&gt;partial&lt;/TD&gt;&lt;TD&gt;new&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;9620&lt;/TD&gt;&lt;TD&gt;93&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;1555018&lt;/TD&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;155501812&lt;/TD&gt;&lt;TD&gt;partial&lt;/TD&gt;&lt;TD&gt;new&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;1555021&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;15550216&lt;/TD&gt;&lt;TD&gt;partial&lt;/TD&gt;&lt;TD&gt;new&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;23430&lt;/TD&gt;&lt;TD&gt;455&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;1555021&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;15550216&lt;/TD&gt;&lt;TD&gt;partial&lt;/TD&gt;&lt;TD&gt;cancel&lt;/TD&gt;&lt;TD&gt;-1&lt;/TD&gt;&lt;TD&gt;-22230&lt;/TD&gt;&lt;TD&gt;-405&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;1555021&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;15550216&lt;/TD&gt;&lt;TD&gt;partial&lt;/TD&gt;&lt;TD&gt;new&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;22230&lt;/TD&gt;&lt;TD&gt;405&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;1555021&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;15550216&lt;/TD&gt;&lt;TD&gt;partial&lt;/TD&gt;&lt;TD&gt;cancel&lt;/TD&gt;&lt;TD&gt;-1&lt;/TD&gt;&lt;TD&gt;-23430&lt;/TD&gt;&lt;TD&gt;-455&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;TD&gt;1555021&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;15550216&lt;/TD&gt;&lt;TD&gt;partial&lt;/TD&gt;&lt;TD&gt;new&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;14210&lt;/TD&gt;&lt;TD&gt;296&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;(Result which I want to get)&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;rowN&lt;/TD&gt;&lt;TD&gt;contractNo&lt;/TD&gt;&lt;TD&gt;repeatNo&lt;/TD&gt;&lt;TD&gt;contract_repeat&lt;/TD&gt;&lt;TD&gt;cate&lt;/TD&gt;&lt;TD&gt;ctype&lt;/TD&gt;&lt;TD&gt;ccnt&lt;/TD&gt;&lt;TD&gt;L_tot_price&lt;/TD&gt;&lt;TD&gt;P_tot_price&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1555012&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;15550127&lt;/TD&gt;&lt;TD&gt;partial&lt;/TD&gt;&lt;TD&gt;cancel&lt;/TD&gt;&lt;TD&gt;-1&lt;/TD&gt;&lt;TD&gt;-700&lt;/TD&gt;&lt;TD&gt;-200&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1555012&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;15550127&lt;/TD&gt;&lt;TD&gt;partial&lt;/TD&gt;&lt;TD&gt;new&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2000&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1555017&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;15550178&lt;/TD&gt;&lt;TD&gt;partial&lt;/TD&gt;&lt;TD&gt;new&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;9620&lt;/TD&gt;&lt;TD&gt;93&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;1555018&lt;/TD&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;155501812&lt;/TD&gt;&lt;TD&gt;partial&lt;/TD&gt;&lt;TD&gt;new&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;TD&gt;1555021&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;15550216&lt;/TD&gt;&lt;TD&gt;partial&lt;/TD&gt;&lt;TD&gt;new&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;14210&lt;/TD&gt;&lt;TD&gt;296&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For example,&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[contract_repeat 15550127 ]&amp;nbsp;&lt;/P&gt;&lt;P&gt;There are two rows each one has a different ctype, but the sum of L_price of two rows is 1300 and the sum of P_price of two rows is -100, so this data will not be deleted.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[contract_repeat 15550216]&lt;/P&gt;&lt;P&gt;There are five rows and two pairs(=four rows) should be deleted.&lt;/P&gt;&lt;P&gt;(pair1) rowN : 5 &amp;amp; rowN : 8&lt;/P&gt;&lt;P&gt;-&amp;gt; the sum of two L_price = 23430 - 23430 = 0 and&amp;nbsp;the sum of two P_price = 455- 455 = 0&lt;/P&gt;&lt;P&gt;(pair2) rowN : 6 &amp;amp; rowN : 7&lt;/P&gt;&lt;P&gt;-&amp;gt; the sum of two L_price = -22230 + 22230 = 0 and&amp;nbsp;the sum of two P_price = -405 + 405 = 0&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;If I can get any help, I will really appreciate it!&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 22 Feb 2022 13:50:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-delete-pair-rows-which-has-same-values-in-certain-columns/m-p/797808#M313672</guid>
      <dc:creator>seohyeonjeong</dc:creator>
      <dc:date>2022-02-22T13:50:08Z</dc:date>
    </item>
    <item>
      <title>Re: How to delete pair rows which has same values in certain columns?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-delete-pair-rows-which-has-same-values-in-certain-columns/m-p/797864#M313702</link>
      <description>&lt;P&gt;Here is one option that works with this particular data set:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data orig;
	input rowN contractNo repeatNo contract_repeat cate:$10. ctype:$10. ccnt L_tot_price P_tot_price;
	datalines;
1 1555012 7 15550127 partial cancel -1 -700 -200
2 1555012 7 15550127 partial new 1 2000 100
3 1555017 8 15550178 partial new 1 9620 93
4 1555018 12 155501812 partial new 1 0 0
5 1555021 6 15550216 partial new 1 23430 455
6 1555021 6 15550216 partial cancel -1 -22230 -405
7 1555021 6 15550216 partial new 1 22230 405
8 1555021 6 15550216 partial cancel -1 -23430 -455
9 1555021 6 15550216 partial new 1 14210 296
;
run;

data working;
	set orig;
	absccnt = abs(ccnt);
	absL_tot_price = abs(L_tot_price);
	absP_tot_price = abs(P_tot_price);
run;


proc sql;
	select *
	from working
	group by absccnt, absL_tot_price, absP_tot_price
	having count(*) &amp;lt; 2
	order by rowN;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Output data set is:&lt;/P&gt;
&lt;TABLE style="border-collapse: collapse; width: 576pt;" border="0" width="768" cellspacing="0" cellpadding="0"&gt;
&lt;TBODY&gt;
&lt;TR style="height: 30.0pt;"&gt;
&lt;TD width="64" height="40" class="xl63" style="height: 30.0pt; width: 48pt;"&gt;rowN&lt;/TD&gt;
&lt;TD width="64" class="xl63" style="width: 48pt;"&gt;contractNo&lt;/TD&gt;
&lt;TD width="64" class="xl63" style="width: 48pt;"&gt;repeatNo&lt;/TD&gt;
&lt;TD width="64" class="xl63" style="width: 48pt;"&gt;contract_repeat&lt;/TD&gt;
&lt;TD width="64" class="xl64" style="width: 48pt;"&gt;cate&lt;/TD&gt;
&lt;TD width="64" class="xl64" style="width: 48pt;"&gt;ctype&lt;/TD&gt;
&lt;TD width="64" class="xl63" style="width: 48pt;"&gt;ccnt&lt;/TD&gt;
&lt;TD width="64" class="xl63" style="width: 48pt;"&gt;L_tot_price&lt;/TD&gt;
&lt;TD width="64" class="xl63" style="width: 48pt;"&gt;P_tot_price&lt;/TD&gt;
&lt;TD width="64" class="xl63" style="width: 48pt;"&gt;absccnt&lt;/TD&gt;
&lt;TD width="64" class="xl63" style="width: 48pt;"&gt;absL_tot_price&lt;/TD&gt;
&lt;TD width="64" class="xl63" style="width: 48pt;"&gt;absP_tot_price&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" class="xl65" style="height: 15.0pt;"&gt;1&lt;/TD&gt;
&lt;TD class="xl65"&gt;1555012&lt;/TD&gt;
&lt;TD class="xl65"&gt;7&lt;/TD&gt;
&lt;TD class="xl65"&gt;15550127&lt;/TD&gt;
&lt;TD class="xl66"&gt;partial&lt;/TD&gt;
&lt;TD class="xl66"&gt;cancel&lt;/TD&gt;
&lt;TD class="xl65"&gt;-1&lt;/TD&gt;
&lt;TD class="xl65"&gt;-700&lt;/TD&gt;
&lt;TD class="xl65"&gt;-200&lt;/TD&gt;
&lt;TD class="xl65"&gt;1&lt;/TD&gt;
&lt;TD class="xl65"&gt;700&lt;/TD&gt;
&lt;TD class="xl65"&gt;200&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" class="xl65" style="height: 15.0pt;"&gt;2&lt;/TD&gt;
&lt;TD class="xl65"&gt;1555012&lt;/TD&gt;
&lt;TD class="xl65"&gt;7&lt;/TD&gt;
&lt;TD class="xl65"&gt;15550127&lt;/TD&gt;
&lt;TD class="xl66"&gt;partial&lt;/TD&gt;
&lt;TD class="xl66"&gt;new&lt;/TD&gt;
&lt;TD class="xl65"&gt;1&lt;/TD&gt;
&lt;TD class="xl65"&gt;2000&lt;/TD&gt;
&lt;TD class="xl65"&gt;100&lt;/TD&gt;
&lt;TD class="xl65"&gt;1&lt;/TD&gt;
&lt;TD class="xl65"&gt;2000&lt;/TD&gt;
&lt;TD class="xl65"&gt;100&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" class="xl65" style="height: 15.0pt;"&gt;3&lt;/TD&gt;
&lt;TD class="xl65"&gt;1555017&lt;/TD&gt;
&lt;TD class="xl65"&gt;8&lt;/TD&gt;
&lt;TD class="xl65"&gt;15550178&lt;/TD&gt;
&lt;TD class="xl66"&gt;partial&lt;/TD&gt;
&lt;TD class="xl66"&gt;new&lt;/TD&gt;
&lt;TD class="xl65"&gt;1&lt;/TD&gt;
&lt;TD class="xl65"&gt;9620&lt;/TD&gt;
&lt;TD class="xl65"&gt;93&lt;/TD&gt;
&lt;TD class="xl65"&gt;1&lt;/TD&gt;
&lt;TD class="xl65"&gt;9620&lt;/TD&gt;
&lt;TD class="xl65"&gt;93&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" class="xl65" style="height: 15.0pt;"&gt;4&lt;/TD&gt;
&lt;TD class="xl65"&gt;1555018&lt;/TD&gt;
&lt;TD class="xl65"&gt;12&lt;/TD&gt;
&lt;TD class="xl67"&gt;1.56E+08&lt;/TD&gt;
&lt;TD class="xl66"&gt;partial&lt;/TD&gt;
&lt;TD class="xl66"&gt;new&lt;/TD&gt;
&lt;TD class="xl65"&gt;1&lt;/TD&gt;
&lt;TD class="xl65"&gt;0&lt;/TD&gt;
&lt;TD class="xl65"&gt;0&lt;/TD&gt;
&lt;TD class="xl65"&gt;1&lt;/TD&gt;
&lt;TD class="xl65"&gt;0&lt;/TD&gt;
&lt;TD class="xl65"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" class="xl65" style="height: 15.0pt;"&gt;9&lt;/TD&gt;
&lt;TD class="xl65"&gt;1555021&lt;/TD&gt;
&lt;TD class="xl65"&gt;6&lt;/TD&gt;
&lt;TD class="xl65"&gt;15550216&lt;/TD&gt;
&lt;TD class="xl66"&gt;partial&lt;/TD&gt;
&lt;TD class="xl66"&gt;new&lt;/TD&gt;
&lt;TD class="xl65"&gt;1&lt;/TD&gt;
&lt;TD class="xl65"&gt;14210&lt;/TD&gt;
&lt;TD class="xl65"&gt;296&lt;/TD&gt;
&lt;TD class="xl65"&gt;1&lt;/TD&gt;
&lt;TD class="xl65"&gt;14210&lt;/TD&gt;
&lt;TD class="xl65"&gt;296&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 22 Feb 2022 16:53:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-delete-pair-rows-which-has-same-values-in-certain-columns/m-p/797864#M313702</guid>
      <dc:creator>HB</dc:creator>
      <dc:date>2022-02-22T16:53:34Z</dc:date>
    </item>
    <item>
      <title>Re: How to delete pair rows which has same values in certain columns?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-delete-pair-rows-which-has-same-values-in-certain-columns/m-p/798003#M313761</link>
      <description>&lt;P&gt;You might also want to look at&amp;nbsp;&lt;A href="https://go.documentation.sas.com/doc/en/pgmsascdc/9.4_3.5/lepg/p181g1p4bw3phkn1vt5p67xvynd5.htm" target="_self"&gt;FIRST. and LAST. DATA Step Variables&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 23 Feb 2022 12:24:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-delete-pair-rows-which-has-same-values-in-certain-columns/m-p/798003#M313761</guid>
      <dc:creator>AMSAS</dc:creator>
      <dc:date>2022-02-23T12:24:22Z</dc:date>
    </item>
  </channel>
</rss>

