<?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 %do %until using dates in SAS Procedures</title>
    <link>https://communities.sas.com/t5/SAS-Procedures/do-until-using-dates/m-p/435641#M68973</link>
    <description>&lt;P&gt;Hi, I am trying to sum values according to date within a proc sql select statement. I want to sum up the dates for each month and stop when I reach the last date available. The code I am using is below, it seems to get stuck in some kind of infinite loop.&amp;nbsp;&lt;/P&gt;&lt;P&gt;FYI - start_y=13, end_y=17, start_m=1&amp;nbsp; &amp;nbsp; &amp;nbsp;These are all dynamic and reference a date in my project set up&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;%do y=&amp;amp;start_y %to &amp;amp;end_y;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; %do m=&amp;amp;start_m %to 12;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %let mym = %sysfunc(putn(&amp;amp;m,z2.));&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %do %while (&amp;amp;y&amp;amp;mym&amp;lt;=1709);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; , sum(fc_vol&amp;amp;y&amp;amp;mym) as vol&amp;amp;y&amp;amp;mym format = 15.&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %end;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;%end;&lt;BR /&gt;%end;&lt;/P&gt;</description>
    <pubDate>Fri, 09 Feb 2018 13:50:21 GMT</pubDate>
    <dc:creator>bethsmith</dc:creator>
    <dc:date>2018-02-09T13:50:21Z</dc:date>
    <item>
      <title>%do %until using dates</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/do-until-using-dates/m-p/435641#M68973</link>
      <description>&lt;P&gt;Hi, I am trying to sum values according to date within a proc sql select statement. I want to sum up the dates for each month and stop when I reach the last date available. The code I am using is below, it seems to get stuck in some kind of infinite loop.&amp;nbsp;&lt;/P&gt;&lt;P&gt;FYI - start_y=13, end_y=17, start_m=1&amp;nbsp; &amp;nbsp; &amp;nbsp;These are all dynamic and reference a date in my project set up&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;%do y=&amp;amp;start_y %to &amp;amp;end_y;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; %do m=&amp;amp;start_m %to 12;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %let mym = %sysfunc(putn(&amp;amp;m,z2.));&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %do %while (&amp;amp;y&amp;amp;mym&amp;lt;=1709);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; , sum(fc_vol&amp;amp;y&amp;amp;mym) as vol&amp;amp;y&amp;amp;mym format = 15.&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %end;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;%end;&lt;BR /&gt;%end;&lt;/P&gt;</description>
      <pubDate>Fri, 09 Feb 2018 13:50:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/do-until-using-dates/m-p/435641#M68973</guid>
      <dc:creator>bethsmith</dc:creator>
      <dc:date>2018-02-09T13:50:21Z</dc:date>
    </item>
    <item>
      <title>Re: %do %until using dates</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/do-until-using-dates/m-p/435646#M68974</link>
      <description>&lt;P&gt;Why?&amp;nbsp; &amp;nbsp;Base SAS is the programming language, this is a very simple task using a simple datastep.&amp;nbsp; All you are doing is wrapping some simple code up in very complex macro?&lt;/P&gt;
&lt;PRE&gt;data want;
  set ...;
  do y=&amp;amp;start_y. to &amp;amp;end_y.;
    do m=&amp;amp;start_m. to 12;
      want=...;
    end;
  end;
run; &lt;/PRE&gt;
&lt;P&gt;Obviously I am just guessing what you want to do as you have not provided any test data in the form of a datastep, and what you want as the output, Hence I can't be more specific.&lt;/P&gt;
&lt;P&gt;Actually looking at your code a second time, it looks like your just summing a load of variables fc_vol&amp;amp;mym - first it is never a good idea to have transposed data - as you are finding with your code here it is far harder to write code against.&amp;nbsp; Normalise your data - if your working with SQL you should know what that means as SQL is geared towards normalised data - makes this a non-question as you just sum() by group, your fighting SQL by using data which is not designed for it.&amp;nbsp; Again - test data would make providing code easier, but assuming a dataset of:&lt;/P&gt;
&lt;P&gt;YR-MONTH&amp;nbsp; &amp;nbsp;RESULT&lt;/P&gt;
&lt;P&gt;Then:&lt;/P&gt;
&lt;PRE&gt;proc sql;
  create table want as
  select yr_month,
         sum(result) as want
  from   (select * from have where &amp;amp;start_yr. &amp;lt;= yr &amp;lt;= &amp;amp;end_yr. and &amp;amp;month_st &amp;lt;= month)
  group by yr_month;
quit;&lt;/PRE&gt;</description>
      <pubDate>Fri, 09 Feb 2018 14:11:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/do-until-using-dates/m-p/435646#M68974</guid>
      <dc:creator>RW9</dc:creator>
      <dc:date>2018-02-09T14:11:33Z</dc:date>
    </item>
    <item>
      <title>Re: %do %until using dates</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/do-until-using-dates/m-p/435654#M68976</link>
      <description>&lt;P&gt;Yes, your %DO %WHILE loop is infinite.&amp;nbsp; Nothing changes inside the loop that would cause the %DO %WHILE condition to switch from true to false.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;A quick but inelegant solution would be to replace that one line with:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;%if&amp;nbsp;&lt;SPAN&gt; &amp;amp;y&amp;amp;mym &amp;lt;= 1709 %then %do;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 09 Feb 2018 14:48:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/do-until-using-dates/m-p/435654#M68976</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2018-02-09T14:48:05Z</dc:date>
    </item>
    <item>
      <title>Re: %do %until using dates</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/do-until-using-dates/m-p/435656#M68977</link>
      <description>&lt;P&gt;The first time your %DO WHILE statement executes, the value of Y is 13 and MYM is 01.&amp;nbsp; The expression &lt;SPAN&gt;&amp;nbsp;(&amp;amp;y&amp;amp;mym&amp;lt;=1709) resolves to (1301&amp;lt;1709), which is true.&amp;nbsp; Inside of the loop, the value of Y and MYM are not changed, so the %DO %WHILE loops again, infinitely.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;%PUT statements are helpful for debugging.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;I'm not sure what your intended logic is.&amp;nbsp; Perhaps replace the %DO %WHILE with %IF&amp;nbsp;&amp;nbsp;(&amp;amp;y&amp;amp;mym&amp;lt;=1709) %then do.&amp;nbsp; Something like:&lt;/SPAN&gt;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro test (start_y=,end_y=,start_m=);
  %local y m mym ;

  %do y=&amp;amp;start_y %to &amp;amp;end_y;
     %do m=&amp;amp;start_m %to 12;
       %let mym = %sysfunc(putn(&amp;amp;m,z2.));
       %if (&amp;amp;y&amp;amp;mym&amp;lt;=1709) %then %do ;        
         %put &amp;gt;fc_vol&amp;amp;y&amp;amp;mym&amp;lt;&amp;lt; ;
       %end;
     %end;
  %end;
%mend test ;

%test(start_y=13,end_y=17,start_m=1)&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN&gt;Which returns:&lt;/SPAN&gt;&lt;/P&gt;
&lt;PRE&gt;&amp;gt;fc_vol1301&amp;lt;&amp;lt;
&amp;gt;fc_vol1302&amp;lt;&amp;lt;
&amp;gt;fc_vol1303&amp;lt;&amp;lt;
&amp;gt;fc_vol1304&amp;lt;&amp;lt;
&amp;gt;fc_vol1305&amp;lt;&amp;lt;
&amp;gt;fc_vol1306&amp;lt;&amp;lt;
&amp;gt;fc_vol1307&amp;lt;&amp;lt;
&amp;gt;fc_vol1308&amp;lt;&amp;lt;
&amp;gt;fc_vol1309&amp;lt;&amp;lt;
&amp;gt;fc_vol1310&amp;lt;&amp;lt;
&amp;gt;fc_vol1311&amp;lt;&amp;lt;
&amp;gt;fc_vol1312&amp;lt;&amp;lt;
&amp;gt;fc_vol1401&amp;lt;&amp;lt;
&amp;gt;fc_vol1402&amp;lt;&amp;lt;
&amp;gt;fc_vol1403&amp;lt;&amp;lt;
&amp;gt;fc_vol1404&amp;lt;&amp;lt;
&amp;gt;fc_vol1405&amp;lt;&amp;lt;
&amp;gt;fc_vol1406&amp;lt;&amp;lt;
&amp;gt;fc_vol1407&amp;lt;&amp;lt;
&amp;gt;fc_vol1408&amp;lt;&amp;lt;
&amp;gt;fc_vol1409&amp;lt;&amp;lt;
&amp;gt;fc_vol1410&amp;lt;&amp;lt;
&amp;gt;fc_vol1411&amp;lt;&amp;lt;
&amp;gt;fc_vol1412&amp;lt;&amp;lt;
&amp;gt;fc_vol1501&amp;lt;&amp;lt;
&amp;gt;fc_vol1502&amp;lt;&amp;lt;
&amp;gt;fc_vol1503&amp;lt;&amp;lt;
&amp;gt;fc_vol1504&amp;lt;&amp;lt;
&amp;gt;fc_vol1505&amp;lt;&amp;lt;
&amp;gt;fc_vol1506&amp;lt;&amp;lt;
&amp;gt;fc_vol1507&amp;lt;&amp;lt;
&amp;gt;fc_vol1508&amp;lt;&amp;lt;
&amp;gt;fc_vol1509&amp;lt;&amp;lt;
&amp;gt;fc_vol1510&amp;lt;&amp;lt;
&amp;gt;fc_vol1511&amp;lt;&amp;lt;
&amp;gt;fc_vol1512&amp;lt;&amp;lt;
&amp;gt;fc_vol1601&amp;lt;&amp;lt;
&amp;gt;fc_vol1602&amp;lt;&amp;lt;
&amp;gt;fc_vol1603&amp;lt;&amp;lt;
&amp;gt;fc_vol1604&amp;lt;&amp;lt;
&amp;gt;fc_vol1605&amp;lt;&amp;lt;
&amp;gt;fc_vol1606&amp;lt;&amp;lt;
&amp;gt;fc_vol1607&amp;lt;&amp;lt;
&amp;gt;fc_vol1608&amp;lt;&amp;lt;
&amp;gt;fc_vol1609&amp;lt;&amp;lt;
&amp;gt;fc_vol1610&amp;lt;&amp;lt;
&amp;gt;fc_vol1611&amp;lt;&amp;lt;
&amp;gt;fc_vol1612&amp;lt;&amp;lt;
&amp;gt;fc_vol1701&amp;lt;&amp;lt;
&amp;gt;fc_vol1702&amp;lt;&amp;lt;
&amp;gt;fc_vol1703&amp;lt;&amp;lt;
&amp;gt;fc_vol1704&amp;lt;&amp;lt;
&amp;gt;fc_vol1705&amp;lt;&amp;lt;
&amp;gt;fc_vol1706&amp;lt;&amp;lt;
&amp;gt;fc_vol1707&amp;lt;&amp;lt;
&amp;gt;fc_vol1708&amp;lt;&amp;lt;
&amp;gt;fc_vol1709&amp;lt;&amp;lt;
&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 09 Feb 2018 14:50:28 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/do-until-using-dates/m-p/435656#M68977</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2018-02-09T14:50:28Z</dc:date>
    </item>
    <item>
      <title>Re: %do %until using dates</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/do-until-using-dates/m-p/435658#M68978</link>
      <description>&lt;P&gt;That's worked perfectly thank you! My problem was that everything has to be in a certain order so couldn't do a simple sum with group by. All working now&lt;/P&gt;</description>
      <pubDate>Fri, 09 Feb 2018 14:53:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/do-until-using-dates/m-p/435658#M68978</guid>
      <dc:creator>bethsmith</dc:creator>
      <dc:date>2018-02-09T14:53:53Z</dc:date>
    </item>
  </channel>
</rss>

