<?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: break out of %do loop in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/break-out-of-do-loop/m-p/912377#M359677</link>
    <description>&lt;P&gt;You could try %GOTO statement.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro x;
%do i=1 %to 10;
  %put &amp;amp;=i.;
  %if &amp;amp;i.=8 %then %goto exit;
%end;

%exit:
%put DONE.;
%mend;

%x&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Sun, 21 Jan 2024 09:15:07 GMT</pubDate>
    <dc:creator>Ksharp</dc:creator>
    <dc:date>2024-01-21T09:15:07Z</dc:date>
    <item>
      <title>break out of %do loop</title>
      <link>https://communities.sas.com/t5/SAS-Programming/break-out-of-do-loop/m-p/912271#M359646</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am having an issue trying to write a %do macro code that will break when meeting a certain condition. Here is the part of the code I am trying to fix:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=""&gt;			if arrival &amp;gt;= min_exit then do;
				wait_time = 0;

				%let success = 0;
				%let e = 1;
				%let nplus1 = %eval(&amp;amp;nbr_svr + 1);
				%do %until (&amp;amp;e = &amp;amp;nplus1);
					if min_exit = exit&amp;amp;e then do;
						exit&amp;amp;e = arrival + time_service_exp;
						%let e = &amp;amp;nplus1;
					end;
					else do;
						%let e = %eval(&amp;amp;e + 1);
					end;
				%end;
			end;
			output;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;The end goal is to have the following table (in blue is the data I have before starting the loops&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;arrival + time_service_exp&lt;/TD&gt;&lt;TD&gt;exit1&lt;/TD&gt;&lt;TD&gt;exit2&lt;/TD&gt;&lt;TD&gt;exit3&lt;/TD&gt;&lt;TD&gt;min_exit&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;FONT color="#0000FF"&gt;1&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#0000FF"&gt;1&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#0000FF"&gt;0&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#0000FF"&gt;0&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#0000FF"&gt;0&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&amp;nbsp;&lt;FONT color="#FF0000"&gt;- this number is changing because it is the first exit variable equals to min_exit&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;3&lt;FONT color="#FF0000"&gt;- this number is changing because it is the first exit variable equals to min_exit&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;When running, log is showing an infinite loop is being create as&amp;nbsp;it looks like it is still going through the loop for e = n + 1, and then it never ends because it is never true.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you in advance for your help!&lt;/P&gt;</description>
      <pubDate>Fri, 19 Jan 2024 20:34:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/break-out-of-do-loop/m-p/912271#M359646</guid>
      <dc:creator>Shawn08</dc:creator>
      <dc:date>2024-01-19T20:34:05Z</dc:date>
    </item>
    <item>
      <title>Re: break out of %do loop</title>
      <link>https://communities.sas.com/t5/SAS-Programming/break-out-of-do-loop/m-p/912274#M359648</link>
      <description>&lt;P&gt;Since data step statements are not part of macro code, your macro loop is this:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%do %until (&amp;amp;e = &amp;amp;nplus1);
  %let e = &amp;amp;nplus1;
  %let e = %eval(&amp;amp;e + 1);
%end;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;and so the exit condition is never met, as &amp;amp;e will always be &amp;amp;nplus + 1.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Do not mix macro and Base SAS code like this.&lt;/P&gt;</description>
      <pubDate>Fri, 19 Jan 2024 20:53:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/break-out-of-do-loop/m-p/912274#M359648</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2024-01-19T20:53:56Z</dc:date>
    </item>
    <item>
      <title>Re: break out of %do loop</title>
      <link>https://communities.sas.com/t5/SAS-Programming/break-out-of-do-loop/m-p/912276#M359649</link>
      <description>&lt;P&gt;Thank you for your insight.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I tried using only "do" instead of "%do" (do e = 1 to &amp;amp;nbr_svr;), but it wasn't letting me use the "e" as part of the name of a variable (for example, exit&amp;amp;e).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Would you have any advice on how I could approach this problem in order to find a solution?&lt;/P&gt;</description>
      <pubDate>Fri, 19 Jan 2024 20:58:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/break-out-of-do-loop/m-p/912276#M359649</guid>
      <dc:creator>Shawn08</dc:creator>
      <dc:date>2024-01-19T20:58:39Z</dc:date>
    </item>
    <item>
      <title>Re: break out of %do loop</title>
      <link>https://communities.sas.com/t5/SAS-Programming/break-out-of-do-loop/m-p/912285#M359653</link>
      <description>&lt;P&gt;Use an ARRAY statement to specify your set of EXIT variables, then use a DO statement to set through them like so:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;array exits (*) exit1 - exit10;
do i=1 to dim(exits);
  exits(i) = &amp;lt;logic&amp;gt;;
end;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 19 Jan 2024 21:21:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/break-out-of-do-loop/m-p/912285#M359653</guid>
      <dc:creator>SASKiwi</dc:creator>
      <dc:date>2024-01-19T21:21:37Z</dc:date>
    </item>
    <item>
      <title>Re: break out of %do loop</title>
      <link>https://communities.sas.com/t5/SAS-Programming/break-out-of-do-loop/m-p/912370#M359675</link>
      <description>&lt;P&gt;To get answers that contain working and tested code you normally need to provide sample HAVE data, show the desired WANT result and explain the logic how to get from have to want.&lt;/P&gt;</description>
      <pubDate>Sat, 20 Jan 2024 23:11:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/break-out-of-do-loop/m-p/912370#M359675</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2024-01-20T23:11:30Z</dc:date>
    </item>
    <item>
      <title>Re: break out of %do loop</title>
      <link>https://communities.sas.com/t5/SAS-Programming/break-out-of-do-loop/m-p/912377#M359677</link>
      <description>&lt;P&gt;You could try %GOTO statement.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro x;
%do i=1 %to 10;
  %put &amp;amp;=i.;
  %if &amp;amp;i.=8 %then %goto exit;
%end;

%exit:
%put DONE.;
%mend;

%x&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sun, 21 Jan 2024 09:15:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/break-out-of-do-loop/m-p/912377#M359677</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2024-01-21T09:15:07Z</dc:date>
    </item>
  </channel>
</rss>

