<?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: %EVAL within DO Loop in PROC SQL in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/EVAL-within-DO-Loop-in-PROC-SQL/m-p/578182#M163940</link>
    <description>&lt;P&gt;Brilliant.&amp;nbsp; Why work harder when you can work smarter?&amp;nbsp; &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt; thank you!&lt;/P&gt;</description>
    <pubDate>Wed, 31 Jul 2019 19:00:57 GMT</pubDate>
    <dc:creator>akim64</dc:creator>
    <dc:date>2019-07-31T19:00:57Z</dc:date>
    <item>
      <title>%EVAL within DO Loop in PROC SQL</title>
      <link>https://communities.sas.com/t5/SAS-Programming/EVAL-within-DO-Loop-in-PROC-SQL/m-p/578174#M163936</link>
      <description>&lt;P&gt;Hello SAS Community!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am trying to make my life easier by implementing DO loops throughout my code because otherwise I will have to run this a bajillion times.&amp;nbsp; I'm running into an error when I use the %EVAL() function within a variable.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have the following example data set:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;STRONG&gt;Cust_ID&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;Start_Date&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;End_Date&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;Class&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;Close_Flag&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;123&lt;/TD&gt;&lt;TD&gt;1/4/2016&lt;/TD&gt;&lt;TD&gt;5/1/2017&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;CLOSE&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;456&lt;/TD&gt;&lt;TD&gt;1/27/2016&lt;/TD&gt;&lt;TD&gt;2/19/2017&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;UP&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;789&lt;/TD&gt;&lt;TD&gt;1/15/2016&lt;/TD&gt;&lt;TD&gt;3/20/2019&lt;/TD&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;TD&gt;DOWN&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;BR /&gt;I also created several date variables in an earlier part of my code:&lt;/P&gt;&lt;P&gt;&amp;amp;MonthEnd0 = Jan 1, 2017;&lt;/P&gt;&lt;P&gt;&amp;amp;MonthEnd1 = Jan 31, 2017;&lt;/P&gt;&lt;P&gt;&amp;amp;MonthEnd2 = Feb 28, 2017;&lt;/P&gt;&lt;P&gt;&amp;amp;MonthEnd3 = Mar 31, 2017;&lt;/P&gt;&lt;P&gt;etc.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I eventually want to end up with something like the following:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;STRONG&gt;Cust_ID&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;Start_Date&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;End_Date&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;Class&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;Close_Flag&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;Month1Status&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;Month2Status&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;…&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;123&lt;/TD&gt;&lt;TD&gt;1/4/2016&lt;/TD&gt;&lt;TD&gt;5/1/2017&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;CLOSE&lt;/TD&gt;&lt;TD&gt;OPEN&lt;/TD&gt;&lt;TD&gt;OPEN&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;456&lt;/TD&gt;&lt;TD&gt;1/27/2016&lt;/TD&gt;&lt;TD&gt;2/19/2017&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;UP&lt;/TD&gt;&lt;TD&gt;OPEN&lt;/TD&gt;&lt;TD&gt;UP&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;789&lt;/TD&gt;&lt;TD&gt;1/15/2016&lt;/TD&gt;&lt;TD&gt;3/20/2019&lt;/TD&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;TD&gt;DOWN&lt;/TD&gt;&lt;TD&gt;OPEN&lt;/TD&gt;&lt;TD&gt;OPEN&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;BR /&gt;I'm trying to run a case statement where if the End_Date falls between the previous MonthEnd variable and the next MonthEnd variable, then it returns the Close_Flag; otherwise, return 'OPEN'.&amp;nbsp; I want to do this for several months.&amp;nbsp; So I tried this:&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;%macro mymacro;

proc sql;
create table MyTable as 
	select 	Cust_ID,
		%do i=1 %to 10;
		case 
			when End_Date between &amp;amp;&amp;amp;MonthEnd%EVAL(&amp;amp;i.-1) and &amp;amp;&amp;amp;MonthEnd&amp;amp;i. then Close_Flag
			when End_Date &amp;gt; &amp;amp;&amp;amp;MonthEnd&amp;amp;i. then 'OPEN'
			else 'SomethingsWrong'
		end as Month&amp;amp;i.Status,
		%end;
		Class
	from	MyOtherTable;
quit;

%mend mymacro;

%mymacro;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I seem to be getting an error at the %EVAL portion of the code-- specifically, it says "Apparent symbolic reference MONTHEND not resolved."&amp;nbsp; When I comment out that line, the code works.&amp;nbsp; When I get rid of the %EVAL function, the code works.&amp;nbsp; But I don't know how to filter between the two dates otherwise without using the %eval function.&amp;nbsp; Am I missing an ampersand somewhere???&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks in advance!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 31 Jul 2019 18:40:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/EVAL-within-DO-Loop-in-PROC-SQL/m-p/578174#M163936</guid>
      <dc:creator>akim64</dc:creator>
      <dc:date>2019-07-31T18:40:44Z</dc:date>
    </item>
    <item>
      <title>Re: %EVAL within DO Loop in PROC SQL</title>
      <link>https://communities.sas.com/t5/SAS-Programming/EVAL-within-DO-Loop-in-PROC-SQL/m-p/578176#M163937</link>
      <description>You'll need to show more of your code, but your little snippet of how you created your macro variables appears wrong? It sounds like you're classifying data into bins based on months or creating indicator variables for those months? This would work a lot easier within a data step using an array. Is that an option?</description>
      <pubDate>Wed, 31 Jul 2019 18:38:02 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/EVAL-within-DO-Loop-in-PROC-SQL/m-p/578176#M163937</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2019-07-31T18:38:02Z</dc:date>
    </item>
    <item>
      <title>Re: %EVAL within DO Loop in PROC SQL</title>
      <link>https://communities.sas.com/t5/SAS-Programming/EVAL-within-DO-Loop-in-PROC-SQL/m-p/578180#M163939</link>
      <description>&lt;P&gt;Most&amp;nbsp; likely, macro language is attempting to resolve &amp;amp;&amp;amp;MonthEnd before even touching %EVAL.&amp;nbsp; Just compute the %EVAL result first:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
		%do i=1 %to 10;
                %let k = %eval(&amp;amp;i - 1);
		case 
			when End_Date between &amp;amp;&amp;amp;MonthEnd&amp;amp;k and &amp;amp;&amp;amp;MonthEnd&amp;amp;i. then Close_Flag
			when End_Date &amp;gt; &amp;amp;&amp;amp;MonthEnd&amp;amp;i. then 'OPEN'
			else 'SomethingsWrong'
		end as Month&amp;amp;i.Status,
		%end;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 31 Jul 2019 18:54:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/EVAL-within-DO-Loop-in-PROC-SQL/m-p/578180#M163939</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2019-07-31T18:54:18Z</dc:date>
    </item>
    <item>
      <title>Re: %EVAL within DO Loop in PROC SQL</title>
      <link>https://communities.sas.com/t5/SAS-Programming/EVAL-within-DO-Loop-in-PROC-SQL/m-p/578182#M163940</link>
      <description>&lt;P&gt;Brilliant.&amp;nbsp; Why work harder when you can work smarter?&amp;nbsp; &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt; thank you!&lt;/P&gt;</description>
      <pubDate>Wed, 31 Jul 2019 19:00:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/EVAL-within-DO-Loop-in-PROC-SQL/m-p/578182#M163940</guid>
      <dc:creator>akim64</dc:creator>
      <dc:date>2019-07-31T19:00:57Z</dc:date>
    </item>
    <item>
      <title>Re: %EVAL within DO Loop in PROC SQL</title>
      <link>https://communities.sas.com/t5/SAS-Programming/EVAL-within-DO-Loop-in-PROC-SQL/m-p/578183#M163941</link>
      <description>Why not change the loop for i to 0 to 9 instead of 1 to 10?</description>
      <pubDate>Wed, 31 Jul 2019 19:03:04 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/EVAL-within-DO-Loop-in-PROC-SQL/m-p/578183#M163941</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2019-07-31T19:03:04Z</dc:date>
    </item>
    <item>
      <title>Re: %EVAL within DO Loop in PROC SQL</title>
      <link>https://communities.sas.com/t5/SAS-Programming/EVAL-within-DO-Loop-in-PROC-SQL/m-p/578211#M163945</link>
      <description>&lt;P&gt;I tried that! But ...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Whether I do i = 1 to 10&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE class=" language-sas"&gt;&lt;CODE class="  language-sas"&gt;&lt;SPAN class="token operator"&gt;when EndDate between &amp;amp;&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;&amp;amp;&lt;/SPAN&gt;MonthEnd&lt;SPAN class="token macroname"&gt;%EVAL&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;&amp;amp;&lt;/SPAN&gt;i&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token number"&gt;-1&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; and &lt;SPAN class="token operator"&gt;&amp;amp;&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;&amp;amp;&lt;/SPAN&gt;MonthEnd&lt;SPAN class="token operator"&gt;&amp;amp;&lt;/SPAN&gt;i&lt;SPAN class="token punctuation"&gt;.&amp;nbsp;then&amp;nbsp;Close_Flag&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;or whether I do i = 0 to 9&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE class=" language-sas"&gt;&lt;CODE class="  language-sas"&gt;&lt;SPAN class="token operator"&gt;when EndDate between &amp;amp;&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;&amp;amp;&lt;/SPAN&gt;MonthEnd&lt;SPAN class="token operator"&gt;&amp;amp;&lt;/SPAN&gt;i&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt; and &lt;SPAN class="token operator"&gt;&amp;amp;&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;&amp;amp;&lt;/SPAN&gt;MonthEnd%EVAL(&amp;amp;i&lt;SPAN class="token punctuation"&gt;.+1)&amp;nbsp;then&amp;nbsp;Close_Flag&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;I would still be running into the same issue with the %EVAL function because I need the next month in the between statement.&lt;/P&gt;</description>
      <pubDate>Wed, 31 Jul 2019 20:06:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/EVAL-within-DO-Loop-in-PROC-SQL/m-p/578211#M163945</guid>
      <dc:creator>akim64</dc:creator>
      <dc:date>2019-07-31T20:06:22Z</dc:date>
    </item>
    <item>
      <title>Re: %EVAL within DO Loop in PROC SQL</title>
      <link>https://communities.sas.com/t5/SAS-Programming/EVAL-within-DO-Loop-in-PROC-SQL/m-p/578218#M163946</link>
      <description>Yeah, this would be much easier in a data step, no macros needed and easier to loop. Or using some date logics.</description>
      <pubDate>Wed, 31 Jul 2019 20:21:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/EVAL-within-DO-Loop-in-PROC-SQL/m-p/578218#M163946</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2019-07-31T20:21:26Z</dc:date>
    </item>
  </channel>
</rss>

