<?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: assign and resolve macro keyword in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/assign-and-resolve-macro-keyword/m-p/109742#M22775</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You're making this problem much more complex than it needs to be.&amp;nbsp; How about starting this way:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%macro test;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; %local k;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; %global var;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; %do k=1 to 3;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let var = &amp;amp;var lb_val&amp;amp;k;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; %end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; %let var = %str(&amp;nbsp;&amp;nbsp; On ... &amp;amp;var);&lt;/P&gt;&lt;P&gt;%mend test;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 27 Dec 2012 19:10:24 GMT</pubDate>
    <dc:creator>Astounding</dc:creator>
    <dc:date>2012-12-27T19:10:24Z</dc:date>
    <item>
      <title>assign and resolve macro keyword</title>
      <link>https://communities.sas.com/t5/SAS-Programming/assign-and-resolve-macro-keyword/m-p/109741#M22774</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi All,&lt;/P&gt;&lt;P&gt;I have below macro code. When i try to execute i am having error.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; %macro test;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let lb_adt = %str(2011-01-03);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let var =&amp;nbsp; %NRBQUOTE('&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' On %sysfunc(strip(&amp;amp;lb_ADT)) of PCS&amp;nbsp; %unquote(%do k = 1 %to 3;lb_val&amp;amp;k %end;)); &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put &amp;amp;var;&lt;/P&gt;&lt;P&gt;%mend test;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%test;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here is log messages:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;4095&lt;/TD&gt;&lt;TD&gt;%macro test;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4096&lt;/TD&gt;&lt;TD&gt;%let lb_adt = %str(2011-01-03);&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4097&lt;/TD&gt;&lt;TD&gt;%let var =&amp;nbsp; %NRBQUOTE(' &lt;/TD&gt;&lt;TD&gt;' On %sysfunc(strip(&amp;amp;lb_ADT)) of PCS&amp;nbsp; %unquote(%do k = 1 %to 3;lb_val&amp;amp;k %end;));&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;SPAN style="color: #ff0000;"&gt;ERROR: Macro keyword DO appears as text.&amp;nbsp; A semicolon or other delimiter may be missing.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #ff0000;"&gt;ERROR: There is no matching %DO statement for the %END. This statement will be ignored.&lt;/SPAN&gt;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;4098&lt;/TD&gt;&lt;TD&gt;%put &amp;amp;var;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;4099&amp;nbsp;&amp;nbsp; %mend test;&lt;/P&gt;&lt;P&gt;NOTE: The macro TEST completed compilation with errors.&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;8 instructions 200 bytes.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;4100&lt;/P&gt;&lt;P&gt;4101&amp;nbsp;&amp;nbsp; %test;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #ff0000;"&gt;ERROR: Expected close parenthesis after macro function invocation not found.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #ff6600;"&gt;WARNING: Apparent symbolic reference K not resolved.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;NOTE: Line generated by the invoked macro "TEST".&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;lb_val&amp;amp;k));&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;------&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;180&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ERROR 180-322: Statement is not valid or it is used out of proper order.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000;"&gt;&lt;STRONG&gt;I have also tried using the&lt;/STRONG&gt;&amp;nbsp; %unquote and %nrstr to resolve but still having error messages.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; %macro test;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let lb_adt = %str(2011-01-03);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let var =&amp;nbsp; %NRBQUOTE('&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' On %sysfunc(strip(&amp;amp;lb_ADT)) of PCS&amp;nbsp; %unquote(%nrstr(%do k = 1 %to 3;lb_val&amp;amp;k %end;))); &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put &amp;amp;var;&lt;/P&gt;&lt;P&gt;%mend test;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%test;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here is log for above code:&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #ff0000;"&gt;ERROR: The %DO statement is not valid in open code.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;WARNING: Apparent symbolic reference K not resolved.&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #ff0000;"&gt;ERROR: The %END statement is not valid in open code.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' On 2011-01-03 of PCSlb_val&amp;amp;k&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am not sure what kind of mistake i am doing here.&amp;nbsp; Can someone provide any help?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Srisoham&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 27 Dec 2012 18:10:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/assign-and-resolve-macro-keyword/m-p/109741#M22774</guid>
      <dc:creator>srisoham</dc:creator>
      <dc:date>2012-12-27T18:10:35Z</dc:date>
    </item>
    <item>
      <title>Re: assign and resolve macro keyword</title>
      <link>https://communities.sas.com/t5/SAS-Programming/assign-and-resolve-macro-keyword/m-p/109742#M22775</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You're making this problem much more complex than it needs to be.&amp;nbsp; How about starting this way:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%macro test;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; %local k;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; %global var;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; %do k=1 to 3;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let var = &amp;amp;var lb_val&amp;amp;k;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; %end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; %let var = %str(&amp;nbsp;&amp;nbsp; On ... &amp;amp;var);&lt;/P&gt;&lt;P&gt;%mend test;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 27 Dec 2012 19:10:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/assign-and-resolve-macro-keyword/m-p/109742#M22775</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2012-12-27T19:10:24Z</dc:date>
    </item>
    <item>
      <title>Re: assign and resolve macro keyword</title>
      <link>https://communities.sas.com/t5/SAS-Programming/assign-and-resolve-macro-keyword/m-p/109743#M22776</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you very much.&amp;nbsp; This helped me temporarily resolution.&amp;nbsp; Is there way send the macro instruction resolve it later?&lt;/P&gt;&lt;P&gt;The reason is in the above code, at DO loop the reference range high values are dynamic based the pre information availability.&lt;/P&gt;&lt;P&gt;I want to write it something like&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%let txt = %nrbquote( %if &amp;amp;val ^=&amp;nbsp;&amp;nbsp; %then %do;not missing %end;%else %do missing%end;);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Sri&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 27 Dec 2012 20:10:58 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/assign-and-resolve-macro-keyword/m-p/109743#M22776</guid>
      <dc:creator>srisoham</dc:creator>
      <dc:date>2012-12-27T20:10:58Z</dc:date>
    </item>
    <item>
      <title>Re: assign and resolve macro keyword</title>
      <link>https://communities.sas.com/t5/SAS-Programming/assign-and-resolve-macro-keyword/m-p/109744#M22777</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;The easiest way uses CALL SYMPUT instead of macro quoting.&amp;nbsp; That makes it easy to suspend resolution until later.&amp;nbsp; For example:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data _null_;&lt;/P&gt;&lt;P&gt;call symput('var', 'Some long string that includes &amp;amp;val2';);&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Either earlier or later:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%if %length(&amp;amp;val) &amp;gt; 0 %then %let val2=non missing;&lt;/P&gt;&lt;P&gt;%else %let val2 = missing;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Then later on when you need it:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%let txt = &amp;amp;var;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;There are other ways, including macro quoting.&amp;nbsp; This is just the way I would choose.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Good luck.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 27 Dec 2012 20:44:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/assign-and-resolve-macro-keyword/m-p/109744#M22777</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2012-12-27T20:44:08Z</dc:date>
    </item>
  </channel>
</rss>

