<?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: Merging Sales and refund data in SAS Procedures</title>
    <link>https://communities.sas.com/t5/SAS-Procedures/Merging-Sales-and-refund-data/m-p/462103#M70385</link>
    <description>&lt;P&gt;Thanks for you advice.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am only using SAS eg so i doubt I have access to proc BOM,&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;How can I do these with a customized SQL without loop?&amp;nbsp; A customer can have multiple purchase/refund&amp;nbsp;for the same product so any regular join will probably generate duplicate record.&lt;/P&gt;</description>
    <pubDate>Mon, 14 May 2018 15:47:50 GMT</pubDate>
    <dc:creator>Fae</dc:creator>
    <dc:date>2018-05-14T15:47:50Z</dc:date>
    <item>
      <title>Merging Sales and refund data</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Merging-Sales-and-refund-data/m-p/462093#M70383</link>
      <description>&lt;P&gt;I have two set of data: Sales and Refund.&amp;nbsp;&amp;nbsp;I need to merge the refund data back to the original purchase by matching&amp;nbsp;customer_id, product_id and transaction date in a FIFO basis.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Is there any existing merging function/procedure on SAS that I can use or I have to build my own code?&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The solution i have in mind now is add an unique id and a "matched" indicator to both data set, then loop the two data sets as described below:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;lt;&amp;nbsp;Loop till all refund data is matched.&amp;gt;&lt;/P&gt;&lt;P&gt;1)&amp;nbsp; Left join the refund data to sale data base on customer_id, product_id, transaction date and &lt;SPAN&gt;"matched" indicator&amp;nbsp;is false.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;2)&amp;nbsp; Remove any duplicates&lt;/P&gt;&lt;P&gt;3)&amp;nbsp; Set indicator for matched data as true.&lt;/P&gt;&lt;P&gt;&amp;lt;End Loop&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 14 May 2018 15:31:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Merging-Sales-and-refund-data/m-p/462093#M70383</guid>
      <dc:creator>Fae</dc:creator>
      <dc:date>2018-05-14T15:31:21Z</dc:date>
    </item>
    <item>
      <title>Re: Merging Sales and refund data</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Merging-Sales-and-refund-data/m-p/462095#M70384</link>
      <description>&lt;P&gt;If you have SAS/OR you may be able to leverage PROC BOM but I suspect using a customized SQL or data step is just as good. I'm not sure there's a loop required here&amp;nbsp;though.&lt;/P&gt;</description>
      <pubDate>Mon, 14 May 2018 15:37:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Merging-Sales-and-refund-data/m-p/462095#M70384</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2018-05-14T15:37:07Z</dc:date>
    </item>
    <item>
      <title>Re: Merging Sales and refund data</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Merging-Sales-and-refund-data/m-p/462103#M70385</link>
      <description>&lt;P&gt;Thanks for you advice.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am only using SAS eg so i doubt I have access to proc BOM,&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;How can I do these with a customized SQL without loop?&amp;nbsp; A customer can have multiple purchase/refund&amp;nbsp;for the same product so any regular join will probably generate duplicate record.&lt;/P&gt;</description>
      <pubDate>Mon, 14 May 2018 15:47:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Merging-Sales-and-refund-data/m-p/462103#M70385</guid>
      <dc:creator>Fae</dc:creator>
      <dc:date>2018-05-14T15:47:50Z</dc:date>
    </item>
    <item>
      <title>Re: Merging Sales and refund data</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Merging-Sales-and-refund-data/m-p/462105#M70386</link>
      <description>&lt;P&gt;Provide some sample data with the expected output if you want sample code.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/201239"&gt;@Fae&lt;/a&gt; wrote:&lt;BR /&gt;
&lt;P&gt;Thanks for you advice.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I am only using SAS eg so i doubt I have access to proc BOM,&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;How can I do these with a customized SQL without loop?&amp;nbsp; A customer can have multiple purchase/refund&amp;nbsp;for the same product so any regular join will probably generate duplicate record.&lt;/P&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 14 May 2018 15:52:46 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Merging-Sales-and-refund-data/m-p/462105#M70386</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2018-05-14T15:52:46Z</dc:date>
    </item>
    <item>
      <title>Re: Merging Sales and refund data</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Merging-Sales-and-refund-data/m-p/462137#M70391</link>
      <description>&lt;P&gt;Thanks very much.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Sales:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Customer_id&lt;/TD&gt;&lt;TD&gt;Product_Id&lt;/TD&gt;&lt;TD&gt;Transaction_Date&lt;/TD&gt;&lt;TD&gt;Sales_Amt&lt;/TD&gt;&lt;TD&gt;Unit&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;A1&lt;/TD&gt;&lt;TD&gt;10-Jan-18&lt;/TD&gt;&lt;TD&gt;$15&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;A1&lt;/TD&gt;&lt;TD&gt;11-Jan-18&lt;/TD&gt;&lt;TD&gt;$15&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;A2&lt;/TD&gt;&lt;TD&gt;11-Jan-18&lt;/TD&gt;&lt;TD&gt;$30&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;A2&lt;/TD&gt;&lt;TD&gt;10-Jan-18&lt;/TD&gt;&lt;TD&gt;$30&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;A2&lt;/TD&gt;&lt;TD&gt;15-Jan-18&lt;/TD&gt;&lt;TD&gt;$70&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;A3&lt;/TD&gt;&lt;TD&gt;10-Jan-18&lt;/TD&gt;&lt;TD&gt;$20&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;A3&lt;/TD&gt;&lt;TD&gt;11-Jan-18&lt;/TD&gt;&lt;TD&gt;$20&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Refund:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Customer_id&lt;/TD&gt;&lt;TD&gt;Product_Id&lt;/TD&gt;&lt;TD&gt;Transaction_Date&lt;/TD&gt;&lt;TD&gt;Refund_Amt&lt;/TD&gt;&lt;TD&gt;Unit&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;A1&lt;/TD&gt;&lt;TD&gt;12-Jan-18&lt;/TD&gt;&lt;TD&gt;$15&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;A1&lt;/TD&gt;&lt;TD&gt;12-Jan-18&lt;/TD&gt;&lt;TD&gt;$15&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;A2&lt;/TD&gt;&lt;TD&gt;16-Jan-18&lt;/TD&gt;&lt;TD&gt;$35&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;A3&lt;/TD&gt;&lt;TD&gt;12-Jan-18&lt;/TD&gt;&lt;TD&gt;$20&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;A3&lt;/TD&gt;&lt;TD&gt;12-Jan-18&lt;/TD&gt;&lt;TD&gt;$20&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Merged:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Customer_id&lt;/TD&gt;&lt;TD&gt;Product_Id&lt;/TD&gt;&lt;TD&gt;Transaction_Date&lt;/TD&gt;&lt;TD&gt;Sales_Amt&lt;/TD&gt;&lt;TD&gt;Unit&lt;/TD&gt;&lt;TD&gt;Refund_Amt&lt;/TD&gt;&lt;TD&gt;refund_unit&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;A1&lt;/TD&gt;&lt;TD&gt;10-Jan-18&lt;/TD&gt;&lt;TD&gt;$15&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;$15&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;A1&lt;/TD&gt;&lt;TD&gt;11-Jan-18&lt;/TD&gt;&lt;TD&gt;$15&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;$15&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;A2&lt;/TD&gt;&lt;TD&gt;11-Jan-18&lt;/TD&gt;&lt;TD&gt;$30&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;A2&lt;/TD&gt;&lt;TD&gt;10-Jan-18&lt;/TD&gt;&lt;TD&gt;$30&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;A2&lt;/TD&gt;&lt;TD&gt;15-Jan-18&lt;/TD&gt;&lt;TD&gt;$70&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;$35&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;A3&lt;/TD&gt;&lt;TD&gt;10-Jan-18&lt;/TD&gt;&lt;TD&gt;$20&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;$20&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;A3&lt;/TD&gt;&lt;TD&gt;11-Jan-18&lt;/TD&gt;&lt;TD&gt;$20&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;$20&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
      <pubDate>Mon, 14 May 2018 17:11:28 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Merging-Sales-and-refund-data/m-p/462137#M70391</guid>
      <dc:creator>Fae</dc:creator>
      <dc:date>2018-05-14T17:11:28Z</dc:date>
    </item>
    <item>
      <title>Re: Merging Sales and refund data</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Merging-Sales-and-refund-data/m-p/462368#M70395</link>
      <description>&lt;P&gt;The following could give you a start,but you need be familiar with Hash Table.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data Sales;
input Customer_id	Product_Id $	Transaction_Date : $20.	Sales_Amt : dollar32.  Unit ;
cards;
1	A1	10-Jan-18	$15	1
1	A1	11-Jan-18	$15	2
1	A2	11-Jan-18	$30	1
2	A2	10-Jan-18	$30	1
2	A2	15-Jan-18	$70	2
3	A3	10-Jan-18	$20	1
3	A3	11-Jan-18	$20	1
;

data Refund;
input Customer_id  Product_Id $ Transaction_Date : $20. Refund_Amt : dollar32.	refund_unit ;
cards;
1	A1	12-Jan-18	$15	1
1	A1	12-Jan-18	$15	1
2	A2	16-Jan-18	$35	1
3	A3	12-Jan-18	$20	1
3	A3	12-Jan-18	$20	1
;

data want;
 if _n_=1 then do;
  if 0 then set refund;
  declare hash h(dataset:'refund',multidata:'y');
  h.definekey('Customer_id','Product_Id');
  h.definedata('Refund_Amt','refund_unit');
  h.definedone();
 end;
set sales;
by 	Customer_id;
if first.Customer_id then cum=0;
cum+Sales_Amt;
call missing(Refund_Amt,refund_unit);
rc=h.find();
do while(rc=0);
 if Refund_Amt &amp;lt;= cum then do;h.removedup(); leave;end;
 call missing(Refund_Amt,refund_unit);
 rc=h.find_next();
end;

if not missing(Refund_Amt) then cum=cum-Refund_Amt;
drop rc cum;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 15 May 2018 14:31:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Merging-Sales-and-refund-data/m-p/462368#M70395</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2018-05-15T14:31:50Z</dc:date>
    </item>
    <item>
      <title>Re: Merging Sales and refund data</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Merging-Sales-and-refund-data/m-p/462382#M70396</link>
      <description>&lt;P&gt;Thanks very much for your help.&lt;/P&gt;</description>
      <pubDate>Tue, 15 May 2018 15:02:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Merging-Sales-and-refund-data/m-p/462382#M70396</guid>
      <dc:creator>Fae</dc:creator>
      <dc:date>2018-05-15T15:02:44Z</dc:date>
    </item>
  </channel>
</rss>

