<?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 How to program complex loops with macro variables? in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/How-to-program-complex-loops-with-macro-variables/m-p/476694#M286122</link>
    <description>&lt;P&gt;Hello together,&lt;/P&gt;&lt;P&gt;for a specific event day (day_1st) I need to check if there was time in years before and after this event day. For some years (2012 -2016)&amp;nbsp; I have the begin and end of e.g. membership in this year. So, I can look backward and forward from my specific date to count the years of membership before and after this date.&lt;/P&gt;&lt;P&gt;My data test looks like this&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;obs&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;day_1st&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;year_1st&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;begin_2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;end_2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;begin_2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;end_2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;begin_2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;end_2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;begin_2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;end_2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;begin_2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;end_2016&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;15/08/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2016&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;2&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;15/11/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2016&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;15/11/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/05/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2016&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;4&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;15/11/2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2016&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;5&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;15/05/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/08/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2016&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;My problem is that a program without loops is very long and it gets more complicated with more years of membership and more years to look backward and forward.&lt;/P&gt;&lt;P&gt;My program without loops works and it is attached (without_loops.sas)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The result of this program looks like this:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;obs&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;day_1st&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;year_1st&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;begin_2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;end_2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;begin_2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;end_2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;begin_2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;end_2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;begin_2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;end_2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;begin_2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;end_2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;years_before&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;years_after&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;15/08/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;2&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;15/11/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;15/11/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/05/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;0&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;4&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;15/11/2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;5&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;15/05/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/08/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;0&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I would like to shorten this long program by using loops. But the loops don’t work.&lt;/P&gt;&lt;P&gt;Do you have a solution for my problem?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;%macro&lt;/STRONG&gt; &lt;STRONG&gt;&lt;EM&gt;test&lt;/EM&gt;&lt;/STRONG&gt;;&lt;/P&gt;&lt;P&gt;data test2;&lt;/P&gt;&lt;P&gt;set test;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color="#3366FF"&gt;%do&lt;/FONT&gt; jahr_num=&lt;STRONG&gt;2011&lt;/STRONG&gt;&lt;FONT color="#3366FF"&gt; %to&lt;/FONT&gt; &lt;STRONG&gt;2016&lt;/STRONG&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color="#3366FF"&gt; %if&lt;/FONT&gt; jahr_1st=jahr_num &lt;FONT color="#3366FF"&gt;%then %do&lt;/FONT&gt;; &amp;nbsp;&lt;FONT color="#339966"&gt; /* 1. and main problem: the comparison is always false */&lt;/FONT&gt;&lt;/P&gt;&lt;P&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; &lt;FONT color="#3366FF"&gt;%do&lt;/FONT&gt; i_num=&lt;STRONG&gt;1&lt;/STRONG&gt; &lt;FONT color="#3366FF"&gt;%to&lt;/FONT&gt; &lt;STRONG&gt;3&lt;/STRONG&gt;;&lt;/P&gt;&lt;P&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; &lt;FONT color="#3366FF"&gt;%let&lt;/FONT&gt; jahr_m1=&lt;FONT color="#3366FF"&gt;%eval&lt;/FONT&gt;(&amp;amp;jahr-&amp;amp;i.); &lt;FONT color="#339966"&gt;/* 2. %eval gives a mistake */&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if begin_&amp;amp;jahr_m1. &amp;lt;= intnx("year", tag_1st,-&amp;amp;i., "same") and &lt;FONT color="#339966"&gt;/* 3. problem intnx doesn't accept a macro&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#339966"&gt;variable */&lt;/FONT&gt;&lt;/P&gt;&lt;P&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; end_&amp;amp;jahr_m1.=&lt;STRONG&gt;"31Dec&amp;amp;jahr_m1."d&lt;/STRONG&gt; and begin_&amp;amp;jahr.&amp;lt;=tag_1st&lt;/P&gt;&lt;P&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; then years_before=&amp;amp;i.;&lt;/P&gt;&lt;P&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; &lt;FONT color="#3366FF"&gt;%end&lt;/FONT&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color="#3366FF"&gt; %end&lt;/FONT&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color="#3366FF"&gt;%end;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;%mend&lt;/STRONG&gt; test;&lt;/P&gt;&lt;P&gt;%&lt;STRONG&gt;&lt;EM&gt;test&lt;/EM&gt;&lt;/STRONG&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you very much&lt;/P&gt;&lt;P&gt;sasstats&lt;/P&gt;</description>
    <pubDate>Tue, 10 Jul 2018 09:03:08 GMT</pubDate>
    <dc:creator>sasstats</dc:creator>
    <dc:date>2018-07-10T09:03:08Z</dc:date>
    <item>
      <title>How to program complex loops with macro variables?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-program-complex-loops-with-macro-variables/m-p/476694#M286122</link>
      <description>&lt;P&gt;Hello together,&lt;/P&gt;&lt;P&gt;for a specific event day (day_1st) I need to check if there was time in years before and after this event day. For some years (2012 -2016)&amp;nbsp; I have the begin and end of e.g. membership in this year. So, I can look backward and forward from my specific date to count the years of membership before and after this date.&lt;/P&gt;&lt;P&gt;My data test looks like this&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;obs&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;day_1st&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;year_1st&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;begin_2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;end_2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;begin_2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;end_2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;begin_2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;end_2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;begin_2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;end_2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;begin_2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;end_2016&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;15/08/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2016&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;2&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;15/11/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2016&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;15/11/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/05/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2016&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;4&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;15/11/2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2016&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;5&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;15/05/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/08/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2016&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;My problem is that a program without loops is very long and it gets more complicated with more years of membership and more years to look backward and forward.&lt;/P&gt;&lt;P&gt;My program without loops works and it is attached (without_loops.sas)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The result of this program looks like this:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;obs&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;day_1st&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;year_1st&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;begin_2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;end_2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;begin_2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;end_2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;begin_2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;end_2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;begin_2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;end_2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;begin_2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;end_2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;years_before&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;years_after&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;15/08/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;2&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;15/11/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;15/11/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/05/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;0&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;4&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;15/11/2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2013&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;5&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;15/05/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/08/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2014&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2015&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;01/01/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;31/12/2016&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;0&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I would like to shorten this long program by using loops. But the loops don’t work.&lt;/P&gt;&lt;P&gt;Do you have a solution for my problem?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;%macro&lt;/STRONG&gt; &lt;STRONG&gt;&lt;EM&gt;test&lt;/EM&gt;&lt;/STRONG&gt;;&lt;/P&gt;&lt;P&gt;data test2;&lt;/P&gt;&lt;P&gt;set test;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color="#3366FF"&gt;%do&lt;/FONT&gt; jahr_num=&lt;STRONG&gt;2011&lt;/STRONG&gt;&lt;FONT color="#3366FF"&gt; %to&lt;/FONT&gt; &lt;STRONG&gt;2016&lt;/STRONG&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color="#3366FF"&gt; %if&lt;/FONT&gt; jahr_1st=jahr_num &lt;FONT color="#3366FF"&gt;%then %do&lt;/FONT&gt;; &amp;nbsp;&lt;FONT color="#339966"&gt; /* 1. and main problem: the comparison is always false */&lt;/FONT&gt;&lt;/P&gt;&lt;P&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; &lt;FONT color="#3366FF"&gt;%do&lt;/FONT&gt; i_num=&lt;STRONG&gt;1&lt;/STRONG&gt; &lt;FONT color="#3366FF"&gt;%to&lt;/FONT&gt; &lt;STRONG&gt;3&lt;/STRONG&gt;;&lt;/P&gt;&lt;P&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; &lt;FONT color="#3366FF"&gt;%let&lt;/FONT&gt; jahr_m1=&lt;FONT color="#3366FF"&gt;%eval&lt;/FONT&gt;(&amp;amp;jahr-&amp;amp;i.); &lt;FONT color="#339966"&gt;/* 2. %eval gives a mistake */&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if begin_&amp;amp;jahr_m1. &amp;lt;= intnx("year", tag_1st,-&amp;amp;i., "same") and &lt;FONT color="#339966"&gt;/* 3. problem intnx doesn't accept a macro&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#339966"&gt;variable */&lt;/FONT&gt;&lt;/P&gt;&lt;P&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; end_&amp;amp;jahr_m1.=&lt;STRONG&gt;"31Dec&amp;amp;jahr_m1."d&lt;/STRONG&gt; and begin_&amp;amp;jahr.&amp;lt;=tag_1st&lt;/P&gt;&lt;P&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; then years_before=&amp;amp;i.;&lt;/P&gt;&lt;P&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; &lt;FONT color="#3366FF"&gt;%end&lt;/FONT&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color="#3366FF"&gt; %end&lt;/FONT&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color="#3366FF"&gt;%end;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;%mend&lt;/STRONG&gt; test;&lt;/P&gt;&lt;P&gt;%&lt;STRONG&gt;&lt;EM&gt;test&lt;/EM&gt;&lt;/STRONG&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you very much&lt;/P&gt;&lt;P&gt;sasstats&lt;/P&gt;</description>
      <pubDate>Tue, 10 Jul 2018 09:03:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-program-complex-loops-with-macro-variables/m-p/476694#M286122</guid>
      <dc:creator>sasstats</dc:creator>
      <dc:date>2018-07-10T09:03:08Z</dc:date>
    </item>
    <item>
      <title>Re: How to program complex loops with macro variables?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-program-complex-loops-with-macro-variables/m-p/476730#M286123</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;(1) In the line:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#3366ff"&gt;%if&lt;/FONT&gt; jahr_1st=jahr_num &lt;FONT color="#3366ff"&gt;%then %do&lt;/FONT&gt;; &amp;nbsp;&lt;FONT color="#339966"&gt; /* 1. and main problem: the comparison is always false */&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;if jahr_1st and jahr_num are macro variables then they should have an ampersand in front of them, e.g:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#3366ff"&gt;%if&lt;/FONT&gt; &amp;amp;jahr_1st=&amp;amp;jahr_num &lt;FONT color="#3366ff"&gt;%then %do&lt;/FONT&gt;; &amp;nbsp;&lt;FONT color="#339966"&gt; /* 1. and main problem: the comparison is always false */&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;(2) In the line:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#3366ff"&gt;%let&lt;/FONT&gt; jahr_m1=&lt;FONT color="#3366ff"&gt;%eval&lt;/FONT&gt;(&amp;amp;jahr-&amp;amp;i.); &lt;FONT color="#339966"&gt;/* 2. %eval gives a mistake */&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;should "&amp;amp;jahr" be "&amp;amp;jahr_num", as created by the &lt;FONT face="courier new,courier"&gt;%do&lt;/FONT&gt; loop control?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;(3) For line:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;if begin_&amp;amp;jahr_m1. &amp;lt;= intnx("year", tag_1st,-&amp;amp;i., "same") and &lt;FONT color="#339966"&gt;/* 3. problem intnx doesn't accept a macro&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#339966"&gt;variable */&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;please show the error message from the log with surrounding log lines.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;(4) In line:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;end_&amp;amp;jahr_m1.=&lt;STRONG&gt;"31Dec&amp;amp;jahr_m1."d&lt;/STRONG&gt; and begin_&amp;amp;jahr.&amp;lt;=tag_1st&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;should "begin_&amp;amp;jahr" be "begin_&amp;amp;jahr_m1"?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Amir.&lt;/P&gt;</description>
      <pubDate>Tue, 10 Jul 2018 11:01:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-program-complex-loops-with-macro-variables/m-p/476730#M286123</guid>
      <dc:creator>Amir</dc:creator>
      <dc:date>2018-07-10T11:01:26Z</dc:date>
    </item>
    <item>
      <title>Re: How to program complex loops with macro variables?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-program-complex-loops-with-macro-variables/m-p/476766#M286124</link>
      <description>&lt;P&gt;Doesn't look like a macro problem at all. Just use arrays.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;array begin (2012:2016) begin_2012-begin_2016 ;
array end (2012:2016) end_2012-end_2016 ;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;And write your logic using array indexes instead. Perhaps something like this.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;years_before=0;
do i=year_1st to 2012 by -1 while (not missing(begin(i))); 
  years_before=years_before+1;
end;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Then you could use macro variables to make the upper (2016) and lower (2012) limits be flexible without changing the logic of the SAS program.&lt;/P&gt;</description>
      <pubDate>Tue, 10 Jul 2018 12:37:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-program-complex-loops-with-macro-variables/m-p/476766#M286124</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2018-07-10T12:37:38Z</dc:date>
    </item>
    <item>
      <title>Re: How to program complex loops with macro variables?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-program-complex-loops-with-macro-variables/m-p/476824#M286125</link>
      <description>&lt;P&gt;Thank you very much!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I didn't know this trick with the array enummeration 2012:2016!&lt;/P&gt;&lt;P&gt;This will help me in outher cases too.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;With these arrays I was able to sovle my programming problem.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you!&lt;/P&gt;</description>
      <pubDate>Tue, 10 Jul 2018 14:17:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-program-complex-loops-with-macro-variables/m-p/476824#M286125</guid>
      <dc:creator>sasstats</dc:creator>
      <dc:date>2018-07-10T14:17:38Z</dc:date>
    </item>
  </channel>
</rss>

