<?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: Deduping on Min and Max date Using Proc SQL in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Deduping-on-Min-and-Max-date-Using-Proc-SQL/m-p/533674#M146342</link>
    <description>&lt;P&gt;Hi&amp;nbsp;&amp;nbsp;&lt;A id="link_8" class="lia-link-navigation lia-page-link lia-user-name-link" href="https://communities.sas.com/t5/user/viewprofilepage/user-id/248412" target="_self"&gt;&lt;SPAN class=""&gt;eaherbst&lt;/SPAN&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I'm not sure how you are viewing the results when you say "&lt;SPAN&gt;&lt;EM&gt;My output is giving me the correct amount of rows but the dates are coming back as "*******"&lt;/EM&gt;"&lt;BR /&gt;&lt;BR /&gt;What I did notice in your code is the input dataset have SAS Datetime&amp;nbsp;values (e.g. 22DEC18 00:00:00) and in your join you format the First_Merch_Date &amp;amp; Last_Merch_Date with SAS Date formats. Which may be the issue.&lt;BR /&gt;&lt;BR /&gt;You have a couple of options available to you depending on what you want the output to look like&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;1) Use the datepart&amp;nbsp;function to extract the SAS date value from the SAS datetime&amp;nbsp;value:&lt;BR /&gt;min(datepart(b.First_Merch_Date)) as First_Merch_Date format date9.,&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;2) Format the values with a&amp;nbsp;datetime format:&lt;BR /&gt;min(b.First_Merch_Date) as First_Merch_Date format datetime.,&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Here's a test I ran:&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data accounts ;
	id_key="123";
	entrydate="03JAN2019 00:00:00"dt ;
	accountNumber="5678" ;
run ;
data merch;
	id_key="123";
	accountNumber="5678" ;
	entrydate="03JAN2019 00:00:00"dt ;
	first_merch_date="21OCT2018 00:00:00"dt ;
	last_merch_date="21OCT2018 00:00:00"dt ;
	output ;
	id_key="123";
	accountNumber="5678" ;
	entrydate="03JAN2019 00:00:00"dt ;
	first_merch_date="01MAR2016 00:00:00"dt ;
	last_merch_date="20SEP2017 00:00:00"dt ;
	output ;

run ;


proc sql;
create table MerchAcct1 as
select a.ID_Key, a.EntryDate, a.AccountNumber, 
min(datepart(b.First_Merch_Date)) as First_Merch_Date format date9.,
max(datepart(b.Last_Merch_Date)) as Last_Merch_Date format date9.
from Accounts a
join Merch b
on a.ID_Key=b.ID_Key
and a.EntryDate=b.EntryDate
group by a.ID_Key, a.EntryDate, a. AccountNumber;
quit;

proc sql;
create table MerchAcct2 as
select a.ID_Key, a.EntryDate, a.AccountNumber, 
min(b.First_Merch_Date) as First_Merch_Date format datetime.,
max(b.Last_Merch_Date) as Last_Merch_Date format datetime.
from Accounts a
join Merch b
on a.ID_Key=b.ID_Key
and a.EntryDate=b.EntryDate
group by a.ID_Key, a.EntryDate, a. AccountNumber;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
    <pubDate>Thu, 07 Feb 2019 17:45:03 GMT</pubDate>
    <dc:creator>AMSAS</dc:creator>
    <dc:date>2019-02-07T17:45:03Z</dc:date>
    <item>
      <title>Deduping on Min and Max date Using Proc SQL</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Deduping-on-Min-and-Max-date-Using-Proc-SQL/m-p/533655#M146337</link>
      <description>&lt;P&gt;Hi All,&lt;/P&gt;&lt;P&gt;I am trying to join two tables together, the first has a list of accounts(a) and the second has a list of associated merchants(b). As each account may be associated with the same merchant more than once,&amp;nbsp;I would like to return a final table with&amp;nbsp;distinct account numbers based on the&amp;nbsp;min of the first date and max of last date fields in the associated merchant table.&lt;/P&gt;&lt;P&gt;Have for a single account:&lt;/P&gt;&lt;P&gt;a.ID_Key,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a.EntryDate&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; a.AccountNumber,&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;123&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;03JAN19:00:00:00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5678&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;b.Merch_ID_Key&amp;nbsp;&amp;nbsp; &amp;nbsp; b.Entry_Date&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; b.First_Merch_Date&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; b.Last_Merch_Date&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 123&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;03JAN19:00:00:00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 21OCT18:00:00:00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;SPAN style="font-weight: bold;"&gt;22DEC18:00:00:00&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 123&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;03JAN19:00:00:00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="font-weight: bold;"&gt;01MAR16:00:00:00&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 20SEP17:00:00:00&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Want:&lt;/P&gt;&lt;P&gt;a.ID_Key,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a.EntryDate&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; a.AccountNumber,&amp;nbsp;&amp;nbsp; &amp;nbsp;b.First_Merch_Date&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; b.Last_Merch_Date&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;123&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;03JAN19:00:00:00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5678&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01MAR16:00:00:00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 22DEC18:00:00:00&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;My output is giving me the correct amount of rows but the dates are coming back as "*******"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here is my query:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
create table MerchAcct as
select a.ID_Key, a.EntryDate, a.AccountNumber, 
min(b.First_Merch_Date) as First_Merch_Date format date9.,
max(b.Last_Merch_Date) as Last_Merch_Date format date9.
from Accounts a
join Merch b
on a.ID_Key=b.ID_Key
and a.EntryDate=b.EntryDate
group by a.ID_Key, a.EntryDate, a. AccountNumber;
quit;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;As a reference I am using SAS EG.&lt;/P&gt;</description>
      <pubDate>Thu, 07 Feb 2019 16:54:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Deduping-on-Min-and-Max-date-Using-Proc-SQL/m-p/533655#M146337</guid>
      <dc:creator>eaherbst</dc:creator>
      <dc:date>2019-02-07T16:54:50Z</dc:date>
    </item>
    <item>
      <title>Re: Deduping on Min and Max date Using Proc SQL</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Deduping-on-Min-and-Max-date-Using-Proc-SQL/m-p/533674#M146342</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&amp;nbsp;&lt;A id="link_8" class="lia-link-navigation lia-page-link lia-user-name-link" href="https://communities.sas.com/t5/user/viewprofilepage/user-id/248412" target="_self"&gt;&lt;SPAN class=""&gt;eaherbst&lt;/SPAN&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I'm not sure how you are viewing the results when you say "&lt;SPAN&gt;&lt;EM&gt;My output is giving me the correct amount of rows but the dates are coming back as "*******"&lt;/EM&gt;"&lt;BR /&gt;&lt;BR /&gt;What I did notice in your code is the input dataset have SAS Datetime&amp;nbsp;values (e.g. 22DEC18 00:00:00) and in your join you format the First_Merch_Date &amp;amp; Last_Merch_Date with SAS Date formats. Which may be the issue.&lt;BR /&gt;&lt;BR /&gt;You have a couple of options available to you depending on what you want the output to look like&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;1) Use the datepart&amp;nbsp;function to extract the SAS date value from the SAS datetime&amp;nbsp;value:&lt;BR /&gt;min(datepart(b.First_Merch_Date)) as First_Merch_Date format date9.,&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;2) Format the values with a&amp;nbsp;datetime format:&lt;BR /&gt;min(b.First_Merch_Date) as First_Merch_Date format datetime.,&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Here's a test I ran:&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data accounts ;
	id_key="123";
	entrydate="03JAN2019 00:00:00"dt ;
	accountNumber="5678" ;
run ;
data merch;
	id_key="123";
	accountNumber="5678" ;
	entrydate="03JAN2019 00:00:00"dt ;
	first_merch_date="21OCT2018 00:00:00"dt ;
	last_merch_date="21OCT2018 00:00:00"dt ;
	output ;
	id_key="123";
	accountNumber="5678" ;
	entrydate="03JAN2019 00:00:00"dt ;
	first_merch_date="01MAR2016 00:00:00"dt ;
	last_merch_date="20SEP2017 00:00:00"dt ;
	output ;

run ;


proc sql;
create table MerchAcct1 as
select a.ID_Key, a.EntryDate, a.AccountNumber, 
min(datepart(b.First_Merch_Date)) as First_Merch_Date format date9.,
max(datepart(b.Last_Merch_Date)) as Last_Merch_Date format date9.
from Accounts a
join Merch b
on a.ID_Key=b.ID_Key
and a.EntryDate=b.EntryDate
group by a.ID_Key, a.EntryDate, a. AccountNumber;
quit;

proc sql;
create table MerchAcct2 as
select a.ID_Key, a.EntryDate, a.AccountNumber, 
min(b.First_Merch_Date) as First_Merch_Date format datetime.,
max(b.Last_Merch_Date) as Last_Merch_Date format datetime.
from Accounts a
join Merch b
on a.ID_Key=b.ID_Key
and a.EntryDate=b.EntryDate
group by a.ID_Key, a.EntryDate, a. AccountNumber;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 07 Feb 2019 17:45:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Deduping-on-Min-and-Max-date-Using-Proc-SQL/m-p/533674#M146342</guid>
      <dc:creator>AMSAS</dc:creator>
      <dc:date>2019-02-07T17:45:03Z</dc:date>
    </item>
    <item>
      <title>Re: Deduping on Min and Max date Using Proc SQL</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Deduping-on-Min-and-Max-date-Using-Proc-SQL/m-p/533683#M146346</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/248412"&gt;@eaherbst&lt;/a&gt;&amp;nbsp; &amp;nbsp;Your code works when i tested&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;

data a;
input ID_Key      Entry_Date  :datetime20.           AccountNumber;
format Entry_Date datetime20. ;
cards;
123              03JAN19:00:00:00        5678
;

data b;
input ID_Key    ( Entry_Date               First_Merch_Date           Last_Merch_Date) ( :datetime20.);
format Entry_Date               First_Merch_Date           Last_Merch_Date datetime20.;
cards;
123                        03JAN19:00:00:00        21OCT18:00:00:00              22DEC18:00:00:00
123                        03JAN19:00:00:00        01MAR16:00:00:00              20SEP17:00:00:00
;


proc sql;
create table MerchAcct as
select a.ID_Key, a.Entry_Date, a.AccountNumber, 
min(b.First_Merch_Date) as First_Merch_Date format=datetime20. ,
max(b.Last_Merch_Date) as Last_Merch_Date format=datetime20.
from a a
join b b
on a.ID_Key=b.ID_Key
and a.Entry_Date=b.Entry_Date
group by a.ID_Key, a.Entry_Date, a. AccountNumber;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="branch"&gt;
&lt;TABLE class="systitleandfootercontainer" border="0" summary="Page Layout" width="100%" frame="void" rules="none" cellspacing="1" cellpadding="1"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="c systemtitle"&gt;The SAS System&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;BR /&gt;
&lt;DIV&gt;
&lt;DIV align="center"&gt;
&lt;TABLE class="table" summary="Procedure Print: Data Set WORK.MERCHACCT" frame="box" rules="all" cellspacing="0" cellpadding="5"&gt;&lt;COLGROUP&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt;&lt;/COLGROUP&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="r header" scope="col"&gt;ID_Key&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;Entry_Date&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;AccountNumber&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;First_Merch_Date&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;Last_Merch_Date&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;123&lt;/TD&gt;
&lt;TD class="r data"&gt;03JAN2019:00:00:00&lt;/TD&gt;
&lt;TD class="r data"&gt;5678&lt;/TD&gt;
&lt;TD class="r data"&gt;01MAR2016:00:00:00&lt;/TD&gt;
&lt;TD class="r data"&gt;22DEC2018:00:00:00&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;</description>
      <pubDate>Thu, 07 Feb 2019 18:19:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Deduping-on-Min-and-Max-date-Using-Proc-SQL/m-p/533683#M146346</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2019-02-07T18:19:50Z</dc:date>
    </item>
    <item>
      <title>Re: Deduping on Min and Max date Using Proc SQL</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Deduping-on-Min-and-Max-date-Using-Proc-SQL/m-p/533707#M146354</link>
      <description>&lt;P&gt;Your code is OK. You only need to widen the date columns in your viewing window to see the formatted dates.&lt;/P&gt;</description>
      <pubDate>Thu, 07 Feb 2019 19:44:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Deduping-on-Min-and-Max-date-Using-Proc-SQL/m-p/533707#M146354</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2019-02-07T19:44:01Z</dc:date>
    </item>
  </channel>
</rss>

