<?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 Why two consecutive semicolons are needed? in SAS Procedures</title>
    <link>https://communities.sas.com/t5/SAS-Procedures/Why-two-consecutive-semicolons-are-needed/m-p/29445#M6917</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi sir,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I just run a macro as below. The macro is used to merge multiple datasets. The %else statement needs two consecutive semicolons ';' here. Otherwise, SAS reported that it cannot find the data. The log message shows that:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA work.model;&lt;/P&gt;&lt;P&gt;MPRINT(DOMERGE):&amp;nbsp;&amp;nbsp; SET work.model work.data05 RUN;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So it does miss a semicolon here.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*The macro program as below*/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%let num=16;&lt;/P&gt;&lt;P&gt;%macro domerge;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %do i=1 %to &amp;amp;num;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DATA work.model;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if &amp;amp;i=1 %then %do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SET work.data01 work.data02;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else SET work.model work.data%sysfunc(putn(&amp;amp;i+1.,z2.));;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RUN;&lt;/P&gt;&lt;P&gt;&amp;nbsp; %end;&lt;/P&gt;&lt;P&gt;%mend domerge;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%domerge&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 12 Jul 2011 14:00:15 GMT</pubDate>
    <dc:creator>bncoxuk</dc:creator>
    <dc:date>2011-07-12T14:00:15Z</dc:date>
    <item>
      <title>Why two consecutive semicolons are needed?</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Why-two-consecutive-semicolons-are-needed/m-p/29445#M6917</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi sir,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I just run a macro as below. The macro is used to merge multiple datasets. The %else statement needs two consecutive semicolons ';' here. Otherwise, SAS reported that it cannot find the data. The log message shows that:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA work.model;&lt;/P&gt;&lt;P&gt;MPRINT(DOMERGE):&amp;nbsp;&amp;nbsp; SET work.model work.data05 RUN;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So it does miss a semicolon here.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*The macro program as below*/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%let num=16;&lt;/P&gt;&lt;P&gt;%macro domerge;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %do i=1 %to &amp;amp;num;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DATA work.model;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if &amp;amp;i=1 %then %do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SET work.data01 work.data02;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else SET work.model work.data%sysfunc(putn(&amp;amp;i+1.,z2.));;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RUN;&lt;/P&gt;&lt;P&gt;&amp;nbsp; %end;&lt;/P&gt;&lt;P&gt;%mend domerge;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%domerge&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 12 Jul 2011 14:00:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Why-two-consecutive-semicolons-are-needed/m-p/29445#M6917</guid>
      <dc:creator>bncoxuk</dc:creator>
      <dc:date>2011-07-12T14:00:15Z</dc:date>
    </item>
    <item>
      <title>Why two consecutive semicolons are needed?</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Why-two-consecutive-semicolons-are-needed/m-p/29446#M6918</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;The first one goes with the %ELSE the second one is emitted unconditionally and works as a null statement when &amp;amp;i eq 1 and when &amp;amp;i ne 1 it happens to provide the necessary semicolon for the SET emitted by %ELSE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I usually almost always use %DO; code %end;&amp;nbsp; as you have with %IF.&amp;nbsp;&amp;nbsp; I find it easier to understand as in this situation.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 12 Jul 2011 14:09:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Why-two-consecutive-semicolons-are-needed/m-p/29446#M6918</guid>
      <dc:creator>data_null__</dc:creator>
      <dc:date>2011-07-12T14:09:48Z</dc:date>
    </item>
    <item>
      <title>Why two consecutive semicolons are needed?</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Why-two-consecutive-semicolons-are-needed/m-p/29447#M6919</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt; Hi data_null_,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Can I kow why there need to be two separate semicolons for %ELSE and SET, rather than a single semicolon for a statement.:smileyconfused:&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 12 Jul 2011 14:16:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Why-two-consecutive-semicolons-are-needed/m-p/29447#M6919</guid>
      <dc:creator>bncoxuk</dc:creator>
      <dc:date>2011-07-12T14:16:23Z</dc:date>
    </item>
    <item>
      <title>Re: Why two consecutive semicolons are needed?</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Why-two-consecutive-semicolons-are-needed/m-p/29448#M6920</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Because&amp;nbsp; BOTH statements (%else and SET) need semicolons. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Alternatively;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;H1&gt;&lt;STRONG&gt;%else %str(set ...; );&lt;/STRONG&gt;&lt;/H1&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 12 Jul 2011 14:43:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Why-two-consecutive-semicolons-are-needed/m-p/29448#M6920</guid>
      <dc:creator>data_null__</dc:creator>
      <dc:date>2011-07-12T14:43:44Z</dc:date>
    </item>
    <item>
      <title>Why two consecutive semicolons are needed?</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Why-two-consecutive-semicolons-are-needed/m-p/29449#M6921</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Remember that what a macro statement generates need not be a complete SAS statement. So, in the case of your %ELSE you need to do two completely distinct things - finish the %ELSE statement &lt;STRONG&gt;and&lt;/STRONG&gt; finish the SET statement. With only a single semicolon SAS can't tell that your SAS statment is finished because the semicolon has already been used to finish the %ELSE.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 12 Jul 2011 19:02:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Why-two-consecutive-semicolons-are-needed/m-p/29449#M6921</guid>
      <dc:creator>DouglasMartin</dc:creator>
      <dc:date>2011-07-12T19:02:19Z</dc:date>
    </item>
    <item>
      <title>Why two consecutive semicolons are needed?</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Why-two-consecutive-semicolons-are-needed/m-p/29450#M6922</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt; data_null_ gave you the answer to your question. If it's too confusing you could write the %else with %do...%end as you did for the %if statement, such as:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%else %do:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SET work.model work.data%sysfunc(putn(&amp;amp;i+1.,z2.));&lt;/P&gt;&lt;P&gt;%end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;That eliminates the consecutive semicolons and your confusion.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __jive_macro_name="quote" class="jive_text_macro jive_macro_quote"&gt;&lt;P&gt;bncoxuk wrote:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hi data_null_,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Can I kow why there need to be two separate semicolons for %ELSE and SET, rather than a single semicolon for a statement.&lt;SPAN __jive_emoticon_name="confused"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 14 Jul 2011 01:37:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Why-two-consecutive-semicolons-are-needed/m-p/29450#M6922</guid>
      <dc:creator>FloydNevseta</dc:creator>
      <dc:date>2011-07-14T01:37:45Z</dc:date>
    </item>
  </channel>
</rss>

