<?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 date prblm in SAS Procedures</title>
    <link>https://communities.sas.com/t5/SAS-Procedures/date-prblm/m-p/80972#M23352</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;hai all&lt;/P&gt;&lt;P&gt;my input dataset-a&lt;/P&gt;&lt;P&gt;cid cdate1&lt;BR /&gt;1 1jan2010&lt;BR /&gt;1 6jan2010&lt;BR /&gt;2 11jan2010&lt;BR /&gt;2 18jan2010&lt;BR /&gt;2 25jan2010&lt;/P&gt;&lt;P&gt;my input dataset-b&lt;/P&gt;&lt;P&gt;cid cdate2&lt;BR /&gt;1 9jan2010&lt;BR /&gt;1 4jan2010&lt;BR /&gt;2 14jan2010&lt;BR /&gt;2 20jan2010&lt;BR /&gt;2 31jan2010&lt;/P&gt;&lt;P&gt;i want output dataset-c&lt;/P&gt;&lt;P&gt;cid cdate1 cdate2&lt;BR /&gt;1 1jan2010 4jan2010(cdate1 1jan close to cdate2 4jan by cidwise)&lt;BR /&gt;1 6jan2010 9jan2010(cdate1 6jan close to cdate2&amp;nbsp; 9jan by cidwise)&lt;BR /&gt;2 11jan2010 14jan2010(cdate1 11jan close to cdate2&amp;nbsp; 14jan by cidwise)&lt;BR /&gt;2 18jan2010 20jan2010(cdate1 18jan close to cdate2&amp;nbsp; 20jan by cidwise)&lt;BR /&gt;2 25jan2010 31jan2010(cdate1 25jan close to&amp;nbsp; cdate2 31jan by cidwise)&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 12 Apr 2012 07:02:35 GMT</pubDate>
    <dc:creator>sasemp999</dc:creator>
    <dc:date>2012-04-12T07:02:35Z</dc:date>
    <item>
      <title>date prblm</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/date-prblm/m-p/80972#M23352</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;hai all&lt;/P&gt;&lt;P&gt;my input dataset-a&lt;/P&gt;&lt;P&gt;cid cdate1&lt;BR /&gt;1 1jan2010&lt;BR /&gt;1 6jan2010&lt;BR /&gt;2 11jan2010&lt;BR /&gt;2 18jan2010&lt;BR /&gt;2 25jan2010&lt;/P&gt;&lt;P&gt;my input dataset-b&lt;/P&gt;&lt;P&gt;cid cdate2&lt;BR /&gt;1 9jan2010&lt;BR /&gt;1 4jan2010&lt;BR /&gt;2 14jan2010&lt;BR /&gt;2 20jan2010&lt;BR /&gt;2 31jan2010&lt;/P&gt;&lt;P&gt;i want output dataset-c&lt;/P&gt;&lt;P&gt;cid cdate1 cdate2&lt;BR /&gt;1 1jan2010 4jan2010(cdate1 1jan close to cdate2 4jan by cidwise)&lt;BR /&gt;1 6jan2010 9jan2010(cdate1 6jan close to cdate2&amp;nbsp; 9jan by cidwise)&lt;BR /&gt;2 11jan2010 14jan2010(cdate1 11jan close to cdate2&amp;nbsp; 14jan by cidwise)&lt;BR /&gt;2 18jan2010 20jan2010(cdate1 18jan close to cdate2&amp;nbsp; 20jan by cidwise)&lt;BR /&gt;2 25jan2010 31jan2010(cdate1 25jan close to&amp;nbsp; cdate2 31jan by cidwise)&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 12 Apr 2012 07:02:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/date-prblm/m-p/80972#M23352</guid>
      <dc:creator>sasemp999</dc:creator>
      <dc:date>2012-04-12T07:02:35Z</dc:date>
    </item>
    <item>
      <title>Re: date prblm</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/date-prblm/m-p/80973#M23353</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If it is assumed that there should one-to-one correspondence between A and B, then a simple sort procedure for dataset A and B should be enough before doing a match-merge procedure.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data A;&lt;/P&gt;&lt;P&gt;informat CID best8.&lt;/P&gt;&lt;P&gt;&amp;nbsp; DATE date9.;&lt;/P&gt;&lt;P&gt;format CID best8.&lt;/P&gt;&lt;P&gt;&amp;nbsp; DATE date9.;&lt;/P&gt;&lt;P&gt;input CID DATE;&lt;/P&gt;&lt;P&gt;datalines;&lt;/P&gt;&lt;P&gt;1 1jan2010&lt;/P&gt;&lt;P&gt;1 6jan2010&lt;/P&gt;&lt;P&gt;2 11jan2010&lt;/P&gt;&lt;P&gt;2 18jan2010&lt;/P&gt;&lt;P&gt;2 25jan2010&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data B;&lt;/P&gt;&lt;P&gt;informat CID best8.&lt;/P&gt;&lt;P&gt;&amp;nbsp; DATE date9.;&lt;/P&gt;&lt;P&gt;format CID best8.&lt;/P&gt;&lt;P&gt;&amp;nbsp; DATE date9.;&lt;/P&gt;&lt;P&gt;input CID DATE;&lt;/P&gt;&lt;P&gt;datalines;&lt;/P&gt;&lt;P&gt;1 9jan2010&lt;/P&gt;&lt;P&gt;1 4jan2010&lt;/P&gt;&lt;P&gt;2 14jan2010&lt;/P&gt;&lt;P&gt;2 20jan2010&lt;/P&gt;&lt;P&gt;2 31jan2010&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sort data=A;&lt;/P&gt;&lt;P&gt;by CID DATE;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sort data=B;&lt;/P&gt;&lt;P&gt;by CID DATE;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data C;&lt;/P&gt;&lt;P&gt;merge A(in=a rename=(DATE=DATE_A)) B(in=b rename=(DATE=DATE_B));&lt;/P&gt;&lt;P&gt;by CID;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hope this helps.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 12 Apr 2012 08:15:28 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/date-prblm/m-p/80973#M23353</guid>
      <dc:creator>k_laiz</dc:creator>
      <dc:date>2012-04-12T08:15:28Z</dc:date>
    </item>
    <item>
      <title>Re: date prblm</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/date-prblm/m-p/80974#M23354</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;1 1jan2010 4jan2010(cdate1 1jan close to cdate2 4jan by cidwise)&lt;/P&gt;&lt;P&gt;1 &lt;STRONG&gt;6jan2010 9jan2010&lt;/STRONG&gt;(cdate1 6jan close to cdate2&amp;nbsp; 9jan by cidwise)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;But the closest date for &lt;STRONG&gt;6jan2010&amp;nbsp; &lt;/STRONG&gt;is 4jan2010 ,not &lt;STRONG&gt;9jan2010&amp;nbsp; &lt;/STRONG&gt;. Are you sure it is ?&lt;/P&gt;&lt;PRE&gt;data A;
informat CID best8.
&amp;nbsp; DATE date9.;
format CID best8.
&amp;nbsp; DATE date9.;
input CID DATE;
datalines;
1 1jan2010
1 6jan2010
2 11jan2010
2 18jan2010
2 25jan2010
;
run;

 

data B;
informat CID best8.
&amp;nbsp; DATE date9.;
format CID best8.
&amp;nbsp; DATE date9.;
input CID DATE;
datalines;
1 9jan2010
1 4jan2010
2 14jan2010
2 20jan2010
2 31jan2010
;
run;
proc sql;
create table want as
 select a.*,b.date as _date
&amp;nbsp; from a,b
&amp;nbsp;&amp;nbsp; where a.cid=b.cid 
&amp;nbsp;&amp;nbsp;&amp;nbsp; group by a.cid,a.date
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; having abs(a.date-b.date)=min(abs(a.date-b.date));
quit;

&lt;/PRE&gt;&lt;P&gt;&lt;STRONG&gt;&lt;BR /&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;BR /&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;BR /&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;BR /&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;BR /&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Ksharp&lt;BR /&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 12 Apr 2012 09:14:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/date-prblm/m-p/80974#M23354</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2012-04-12T09:14:31Z</dc:date>
    </item>
    <item>
      <title>Re: date prblm</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/date-prblm/m-p/80975#M23355</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Another approach:&lt;/P&gt;&lt;P&gt;data a;&lt;/P&gt;&lt;P&gt;input cid$ cdate1 date9.;&lt;/P&gt;&lt;P&gt;format cdate1 date9.;&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;1 1jan2010&lt;/P&gt;&lt;P&gt;1 6jan2010&lt;/P&gt;&lt;P&gt;2 11jan2010&lt;/P&gt;&lt;P&gt;2 18jan2010&lt;/P&gt;&lt;P&gt;2 25jan2010&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data b;&lt;/P&gt;&lt;P&gt;input cid$ cdate2 date9.;&lt;/P&gt;&lt;P&gt;format cdate2 date9.;&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;1 9jan2010&lt;/P&gt;&lt;P&gt;1 4jan2010&lt;/P&gt;&lt;P&gt;2 14jan2010&lt;/P&gt;&lt;P&gt;2 20jan2010&lt;/P&gt;&lt;P&gt;2 31jan2010&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want (drop=_:);&lt;/P&gt;&lt;P&gt;&amp;nbsp; if _n_=1 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if 0 then set b;&lt;/P&gt;&lt;P&gt;dcl hash h(dataset:'b', multidata: 'y');&lt;/P&gt;&lt;P&gt;h.definekey('cid');&lt;/P&gt;&lt;P&gt;h.definedata('cdate2');&lt;/P&gt;&lt;P&gt;h.definedone();&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;retain _min _mdt 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set a;&lt;/P&gt;&lt;P&gt;&amp;nbsp; by cid;&lt;/P&gt;&lt;P&gt;&amp;nbsp; _rc=h.find();&lt;/P&gt;&lt;P&gt;&amp;nbsp; if _rc=0 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; _min=abs(cdate1-cdate2);&lt;/P&gt;&lt;P&gt;_mdt=cdate2;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do while (_rc=0);&lt;/P&gt;&lt;P&gt;if _min&amp;gt; abs(cdate1-cdate2) then do;&lt;/P&gt;&lt;P&gt;_min=abs(cdate1-cdate2);&lt;/P&gt;&lt;P&gt;_mdt=cdate2;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;_rc=h.find_next();&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;cdate2=_mdt;&lt;/P&gt;&lt;P&gt; run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc print;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Haikuo &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 12 Apr 2012 15:55:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/date-prblm/m-p/80975#M23355</guid>
      <dc:creator>Haikuo</dc:creator>
      <dc:date>2012-04-12T15:55:18Z</dc:date>
    </item>
    <item>
      <title>Re: date prblm</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/date-prblm/m-p/80976#M23356</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;OK. If I understand what you mean.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;data A;
informat CID best8.
&amp;nbsp; DATE date9.;
format CID best8.
&amp;nbsp; DATE date9.;
input CID DATE;
datalines;
1 1jan2010
1 6jan2010
2 11jan2010
2 18jan2010
2 25jan2010
;
run;

data B;
informat _CID best8.
&amp;nbsp; _DATE date9.;
format _CID best8.
&amp;nbsp; _DATE date9.;
input _CID _DATE;
_n+1;
datalines;
1 9jan2010
1 4jan2010
2 14jan2010
2 20jan2010
2 31jan2010
;
run;
data want(keep=cid date _date);
 if _n_ eq 1 then do;
&amp;nbsp; if 0 then set b;
&amp;nbsp; declare hash ha(dataset:'b');
&amp;nbsp; declare hiter hi('ha');
&amp;nbsp;&amp;nbsp; ha.definekey('_n');
&amp;nbsp;&amp;nbsp; ha.definedata('_n','_cid','_date');
&amp;nbsp;&amp;nbsp; ha.definedone();
 end;
set a;
min=99999;
do while(hi.next()=0);
 if cid=_cid and abs(date-_date) lt min then do;flag=1; n=_n; min=abs(date-_date);end;
end;
if flag then do;ha.find(key:n);output;
ha.remove(key:n); end;
run;
 
&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Ksharp&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 13 Apr 2012 04:38:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/date-prblm/m-p/80976#M23356</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2012-04-13T04:38:01Z</dc:date>
    </item>
    <item>
      <title>Re: date prblm</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/date-prblm/m-p/80977#M23357</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Aha, if so, my previous code can be added ONE statement to do the same thing:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data a;&lt;/P&gt;&lt;P&gt;input cid$ cdate1 date9.;&lt;/P&gt;&lt;P&gt;format cdate1 date9.;&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;1 1jan2010&lt;/P&gt;&lt;P&gt;1 6jan2010&lt;/P&gt;&lt;P&gt;2 11jan2010&lt;/P&gt;&lt;P&gt;2 18jan2010&lt;/P&gt;&lt;P&gt;2 25jan2010&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data b;&lt;/P&gt;&lt;P&gt;input cid$ cdate2 date9.;&lt;/P&gt;&lt;P&gt;format cdate2 date9.;&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;1 9jan2010&lt;/P&gt;&lt;P&gt;1 4jan2010&lt;/P&gt;&lt;P&gt;2 14jan2010&lt;/P&gt;&lt;P&gt;2 20jan2010&lt;/P&gt;&lt;P&gt;2 31jan2010&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want (drop=_:);&lt;/P&gt;&lt;P&gt;&amp;nbsp; if _n_=1 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if 0 then set b;&lt;/P&gt;&lt;P&gt;dcl hash h(dataset:'b', multidata: 'y');&lt;/P&gt;&lt;P&gt;h.definekey('cid');&lt;/P&gt;&lt;P&gt;h.definedata('cdate2');&lt;/P&gt;&lt;P&gt;h.definedone();&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;retain _min _mdt 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set a;&lt;/P&gt;&lt;P&gt;&amp;nbsp; by cid;&lt;/P&gt;&lt;P&gt;&amp;nbsp; _rc=h.find();&lt;/P&gt;&lt;P&gt;&amp;nbsp; if _rc=0 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; _min=abs(cdate1-cdate2);&lt;/P&gt;&lt;P&gt;_mdt=cdate2;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do while (_rc=0);&lt;/P&gt;&lt;P&gt;if _min&amp;gt; abs(cdate1-cdate2) and &lt;SPAN style="text-decoration: underline;"&gt;&lt;EM&gt;&lt;STRONG&gt;cdate2&amp;gt;cdate1&lt;/STRONG&gt;&lt;/EM&gt;&lt;/SPAN&gt; then do;&lt;/P&gt;&lt;P&gt;_min=abs(cdate1-cdate2);&lt;/P&gt;&lt;P&gt;_mdt=cdate2;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;_rc=h.find_next();&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;cdate2=_mdt;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc print;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Haikuo&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 13 Apr 2012 18:33:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/date-prblm/m-p/80977#M23357</guid>
      <dc:creator>Haikuo</dc:creator>
      <dc:date>2012-04-13T18:33:36Z</dc:date>
    </item>
  </channel>
</rss>

