<?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: Please make my code short in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Please-make-my-code-short/m-p/82907#M17892</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;My code is shorter than PG.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;
data small;
format date1 mmddyy10.;
input id date1 mmddyy10.;
cards;
1 08/08/2000
1 08/08/2007
1 08/08/2012
;
data big;
format date2 mmddyy10.;
input id date2 mmddyy10.;
cards;
1 07/08/2000
1 08/08/2002
1 09/08/2004
1 10/08/2007
1 10/08/2009
1 10/08/2011
1 08/08/2012
;
run;
data temp(rename=(date=date2));
 set small(rename=(date1=date) in=ina) big(rename=(date2=date) in=inb);
 by id date;
 retain _date;
 if ina then _date=date;
 if inb;
 format _date mmddyy10.;
run;
proc sort data=temp;by id descending _date;run;
data want(drop=_date);
 retain date1;
 set temp;
 if not missing(_date) then date1=_date;
&amp;nbsp; format date1 mmddyy10.;
run;
proc sort data=want;by id date1 date2;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;Xia Keshan&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 29 Aug 2014 14:44:35 GMT</pubDate>
    <dc:creator>Ksharp</dc:creator>
    <dc:date>2014-08-29T14:44:35Z</dc:date>
    <item>
      <title>Please make my code short</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Please-make-my-code-short/m-p/82899#M17884</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data small;&lt;/P&gt;&lt;P&gt;format date1 mmddyy10.;&lt;/P&gt;&lt;P&gt;input id date1 mmddyy10.;&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;1 08/08/2000&lt;/P&gt;&lt;P&gt;1 08/08/2007&lt;/P&gt;&lt;P&gt;1 08/08/2012&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;data big;&lt;/P&gt;&lt;P&gt;format date2 mmddyy10.;&lt;/P&gt;&lt;P&gt;input id date2 mmddyy10.;&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;1 07/08/2000&lt;/P&gt;&lt;P&gt;1 08/08/2002&lt;/P&gt;&lt;P&gt;1 09/08/2004&lt;/P&gt;&lt;P&gt;1 10/08/2007&lt;/P&gt;&lt;P&gt;1 10/08/2009&lt;/P&gt;&lt;P&gt;1 10/08/2011&lt;/P&gt;&lt;P&gt;1 08/08/2012&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;data temp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set small;&lt;/P&gt;&lt;P&gt;&amp;nbsp; by id;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if first.id then count=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; count+1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; data after3(drop=count date1) select3;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; merge big temp(where=(count=3));&lt;/P&gt;&lt;P&gt;&amp;nbsp; by id ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if date2-date1&amp;gt;-90 then output select3;&lt;/P&gt;&lt;P&gt;&amp;nbsp; else output after3;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; data after2(drop=count date1) select2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; merge after3&amp;nbsp; temp(where=(count=2) );&lt;/P&gt;&lt;P&gt;&amp;nbsp; by id ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if date2-date1&amp;gt;-90 then output select2;&lt;/P&gt;&lt;P&gt;&amp;nbsp; else output after2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; data after1(drop=count date1) select1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; merge after2 temp(where=(count=1));&lt;/P&gt;&lt;P&gt;&amp;nbsp; by id ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if date2-date1&amp;gt;-90&amp;nbsp; then output select1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; else output after1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; run;&lt;/P&gt;&lt;P&gt;&amp;nbsp; data final(drop=count);&lt;/P&gt;&lt;P&gt;&amp;nbsp; retain id date1 date2;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set select1 select2 select3;&lt;/P&gt;&lt;P&gt;&amp;nbsp; by id;&lt;/P&gt;&lt;P&gt;&amp;nbsp; run;&lt;/P&gt;&lt;P&gt;&amp;nbsp; proc print;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 15 Sep 2013 03:04:41 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Please-make-my-code-short/m-p/82899#M17884</guid>
      <dc:creator>Linlin</dc:creator>
      <dc:date>2013-09-15T03:04:41Z</dc:date>
    </item>
    <item>
      <title>Re: Please make my code short</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Please-make-my-code-short/m-p/82900#M17885</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;What about:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data Hash_Source id_grp_cnt(keep=id count);&lt;BR /&gt;&amp;nbsp; set small;&lt;BR /&gt;&amp;nbsp; by id date1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if first.id then&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; count=1;&lt;BR /&gt;&amp;nbsp; else count+1;&lt;BR /&gt;&amp;nbsp; output Hash_Source;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if last.id then&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; output id_grp_cnt;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want;&lt;BR /&gt;&amp;nbsp; if _n_=1 then&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if 0 then&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set temp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dcl hash h1 (dataset:'Hash_Source',ordered:'y');&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _rc=h1.defineKey('id','count');&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _rc=h1.defineData('date1');&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _rc=h1.defineDone();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; merge big id_grp_cnt;&lt;BR /&gt;&amp;nbsp; by id;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do _i=count to 1 by -1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if h1.find(key:id,key:_i) =0 then&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if date2-date1&amp;gt;-90 then&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; leave;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp; end;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;...and this would be the "short code" version - but I assume that's not really what you had in mind.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;&amp;nbsp; create table want2 as&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select s.id, s.date1, b.date2&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; from small s, big b&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; where b.date2-s.date1&amp;gt;-90&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; group by s.id, b.date2&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; having b.date2-s.date1 = min(b.date2-s.date1)&lt;/P&gt;&lt;P&gt;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 15 Sep 2013 08:00:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Please-make-my-code-short/m-p/82900#M17885</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2013-09-15T08:00:43Z</dc:date>
    </item>
    <item>
      <title>Re: Please make my code short</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Please-make-my-code-short/m-p/82901#M17886</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Linlin,&lt;/P&gt;&lt;P&gt;I am trying to reverse engineer your example. Ia ma seeing:&lt;/P&gt;&lt;P&gt;- I small dataset with dates.&lt;/P&gt;&lt;P&gt;&amp;nbsp; Could be optimized by using formats or hashing when needing a table lookup&lt;/P&gt;&lt;P&gt;- A big dataset that is summarized by id's&lt;/P&gt;&lt;P&gt;&amp;nbsp; Proc summary/means could be used to do that job.&lt;/P&gt;&lt;P&gt;&amp;nbsp; With in-database processing there is no need for sorting I assume. When it is ordered but not sorted it will also work.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;- The big dataset is merged with it is summarized by id's&lt;/P&gt;&lt;P&gt;&amp;nbsp; And then I get lost as subsetting the dataset in several steps on count....&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; ... I got lost there on the intention... Please explain.&lt;/P&gt;&lt;P&gt;- The resulted selections are concatenated again &lt;/P&gt;&lt;P&gt;&amp;nbsp; Why losing the information of how it was constructed?&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 15 Sep 2013 17:02:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Please-make-my-code-short/m-p/82901#M17886</guid>
      <dc:creator>jakarman</dc:creator>
      <dc:date>2013-09-15T17:02:10Z</dc:date>
    </item>
    <item>
      <title>Re: Please make my code short</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Please-make-my-code-short/m-p/82902#M17887</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Linlin,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I think you'll find this much easier to work with if you transpose the second data set.&amp;nbsp; So start with DATE in both data sets (not DATE1 and DATE2).&amp;nbsp; Then transpose the dates in the larger data BY ID.&amp;nbsp; With one observation per ID being merged in from the larger data set, the rest should become much easier.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Good luck.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 15 Sep 2013 22:16:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Please-make-my-code-short/m-p/82902#M17887</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2013-09-15T22:16:22Z</dc:date>
    </item>
    <item>
      <title>Re: Please make my code short</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Please-make-my-code-short/m-p/82903#M17888</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Linlin, This gives you the answer you wanted:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;proc sort data=small; by id descending date1; run; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;data smallNext;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;format lastDate1 firstDate1 yymmdd10.;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;lastDate1 = '31DEC2200'd; /* The end of time... */&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;do until(last.id);&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&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;&amp;nbsp;&amp;nbsp; set small; by id;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&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;&amp;nbsp;&amp;nbsp; firstDate1 = intnx("DAY", date1, -90);&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&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;&amp;nbsp;&amp;nbsp; output;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&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;&amp;nbsp;&amp;nbsp; lastDate1 = intnx("DAY", date1, -1);&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&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;&amp;nbsp;&amp;nbsp; end;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;run;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;proc sql;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;create table want as&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;select &lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&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;&amp;nbsp;&amp;nbsp; S.id, &lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&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;&amp;nbsp;&amp;nbsp; S.date1, &lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&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;&amp;nbsp;&amp;nbsp; B.date2&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;from &lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&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;&amp;nbsp;&amp;nbsp; smallNext as S inner join&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&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;&amp;nbsp;&amp;nbsp; big as B on&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&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;&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; S.id = B.id and &lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&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;&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; B.date2 between S.firstDate1 and S.lastDate1&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;order by id, date1, date2;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;drop table smallNext;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;quit;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PG&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 16 Sep 2013 14:48:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Please-make-my-code-short/m-p/82903#M17888</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2013-09-16T14:48:07Z</dc:date>
    </item>
    <item>
      <title>Re: Please make my code short</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Please-make-my-code-short/m-p/82904#M17889</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Patrick,&lt;/P&gt;&lt;P&gt;Your hash solution is too diffcult for me:smileysilly:. I like your Sql solution (I changed&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; font-family: Courier New;"&gt; having b.date2-s.date1 = min(b.date2-s.date1) to&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; font-family: Courier New;"&gt; having b.date2-s.date1 = min(b.date2-s.date1) and &lt;SPAN style="color: #ff0000;"&gt;b.id=s.id&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;. Thank you&lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://communities.sas.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt; !&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Astounding, I will try to come up a solution as you suggested&lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://communities.sas.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PG, I tried to rewrite your code to make sure I understand completely. I got the same result even without the ORDER statement. I wonder why :smileyconfused:.&lt;/P&gt;&lt;P&gt;data small;&lt;/P&gt;&lt;P&gt;format date1 mmddyy10.;&lt;/P&gt;&lt;P&gt;input id date1 mmddyy10.;&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;1 08/08/2000&lt;/P&gt;&lt;P&gt;1 08/08/2007&lt;/P&gt;&lt;P&gt;1 08/08/2012&lt;/P&gt;&lt;P&gt;2 07/05/2002&lt;/P&gt;&lt;P&gt;2 09/09/2004&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;data big;&lt;/P&gt;&lt;P&gt;format date2 mmddyy10.;&lt;/P&gt;&lt;P&gt;input id date2 mmddyy10.;&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;1 07/08/2000&lt;/P&gt;&lt;P&gt;1 08/08/2002&lt;/P&gt;&lt;P&gt;1 09/08/2004&lt;/P&gt;&lt;P&gt;1 10/08/2007&lt;/P&gt;&lt;P&gt;1 10/08/2009&lt;/P&gt;&lt;P&gt;1 10/08/2011&lt;/P&gt;&lt;P&gt;1 08/08/2012&lt;/P&gt;&lt;P&gt;2 06/05/2002&lt;/P&gt;&lt;P&gt;2 08/07/2003&lt;/P&gt;&lt;P&gt;2 09/09/2004&lt;/P&gt;&lt;P&gt;2 08/20/2005&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;proc sort data=small; by id descending date1;&lt;/P&gt;&lt;P&gt;data snext;&lt;/P&gt;&lt;P&gt;format lastdate1 firstdate1 mmddyy10.;&lt;/P&gt;&lt;P&gt;lastdate1='01jan2020'd;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do until (last.id);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; set small;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; by id;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; firstdate1=intnx('month',date1,-3,'s');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; lastdate1=intnx('day',date1,-1);&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; run;&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; create table want as select s.id,s.date1,b.date2&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from snext as s&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; inner join&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; big as b&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; on s.id=b.id and (b.date2 between firstdate1 and lastdate1);&lt;/P&gt;&lt;P&gt;&amp;nbsp; quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Message was edited by: Linlin&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 16 Sep 2013 15:20:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Please-make-my-code-short/m-p/82904#M17889</guid>
      <dc:creator>Linlin</dc:creator>
      <dc:date>2013-09-16T15:20:00Z</dc:date>
    </item>
    <item>
      <title>Re: Please make my code short</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Please-make-my-code-short/m-p/82905#M17890</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;At the base, SQL queries are set theory operations, they don't expect your data to be sorted, nor do they guarantee the order of the result, unless you request it explicitly with an ORDER BY clause. So, removing the ORDER BY clause gave the same result, but that order is not guaranteed. If you are looking for other removable statements, you could get rid of the format statement in snext, it was there only for debugging purposes.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PG&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 16 Sep 2013 16:07:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Please-make-my-code-short/m-p/82905#M17890</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2013-09-16T16:07:17Z</dc:date>
    </item>
    <item>
      <title>Re: Please make my code short</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Please-make-my-code-short/m-p/82906#M17891</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi, Ma'am Linlin,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You are Master and I am newbie.&lt;/P&gt;&lt;P&gt;Need to learn from you.&lt;/P&gt;&lt;P&gt;I recently post a request about creating an application of clicks, manual, dialoges....&lt;/P&gt;&lt;P&gt;Maybe Ma'am could help greatly.&lt;/P&gt;&lt;P&gt;I am Chinese proper. An old guy.&lt;/P&gt;&lt;P&gt;How about Ma'am?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 28 Aug 2014 14:41:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Please-make-my-code-short/m-p/82906#M17891</guid>
      <dc:creator>iren_118</dc:creator>
      <dc:date>2014-08-28T14:41:10Z</dc:date>
    </item>
    <item>
      <title>Re: Please make my code short</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Please-make-my-code-short/m-p/82907#M17892</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;My code is shorter than PG.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;
data small;
format date1 mmddyy10.;
input id date1 mmddyy10.;
cards;
1 08/08/2000
1 08/08/2007
1 08/08/2012
;
data big;
format date2 mmddyy10.;
input id date2 mmddyy10.;
cards;
1 07/08/2000
1 08/08/2002
1 09/08/2004
1 10/08/2007
1 10/08/2009
1 10/08/2011
1 08/08/2012
;
run;
data temp(rename=(date=date2));
 set small(rename=(date1=date) in=ina) big(rename=(date2=date) in=inb);
 by id date;
 retain _date;
 if ina then _date=date;
 if inb;
 format _date mmddyy10.;
run;
proc sort data=temp;by id descending _date;run;
data want(drop=_date);
 retain date1;
 set temp;
 if not missing(_date) then date1=_date;
&amp;nbsp; format date1 mmddyy10.;
run;
proc sort data=want;by id date1 date2;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;Xia Keshan&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 29 Aug 2014 14:44:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Please-make-my-code-short/m-p/82907#M17892</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2014-08-29T14:44:35Z</dc:date>
    </item>
    <item>
      <title>Re: Please make my code short</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Please-make-my-code-short/m-p/82908#M17893</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;hi, xia,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;this is bai. missed Beijing very much.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 04 Sep 2014 14:14:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Please-make-my-code-short/m-p/82908#M17893</guid>
      <dc:creator>iren_118</dc:creator>
      <dc:date>2014-09-04T14:14:54Z</dc:date>
    </item>
    <item>
      <title>Re: Please make my code short</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Please-make-my-code-short/m-p/82909#M17894</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;?? Why ? Are you Chinese guy ? I missed U.S. as well.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Xia Keshan&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 04 Sep 2014 14:45:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Please-make-my-code-short/m-p/82909#M17894</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2014-09-04T14:45:37Z</dc:date>
    </item>
  </channel>
</rss>

