<?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: using %sysfunc(cat() ) in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/using-sysfunc-cat/m-p/191077#M36042</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I don't see an error in how you're writing your cat functions, except I wonder why you need the resolve. Of course this all assumes you're in a macro, which you haven't shown.&lt;/P&gt;&lt;P&gt;To determine why you have errors in the first place, please post the log with your errors. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;That being said, this is definitely not the most efficient or effective way of solving this problem.&lt;/P&gt;&lt;P&gt;If you want a more efficient solution, perhaps post the problem you're trying to solve.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 28 Feb 2014 20:14:16 GMT</pubDate>
    <dc:creator>Reeza</dc:creator>
    <dc:date>2014-02-28T20:14:16Z</dc:date>
    <item>
      <title>using %sysfunc(cat() )</title>
      <link>https://communities.sas.com/t5/SAS-Programming/using-sysfunc-cat/m-p/191075#M36040</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;BR /&gt;I wrote a macro that creates macro variables of satistics&amp;nbsp; from proc NPAR1WAY and then inputs them into a data set called wilcox1 as below.There are 4 statistics wilstatk and pvalk k=1,..,4. &lt;BR /&gt;For some reason the loop goes all the way to k=5 and and the the resolve functoin tries to resolve &amp;amp;wilstat5 and &amp;amp;pval5 which don't exist. Can anyone tell me what might be causing this? Am I using the %sysfunc(cat() ) correctly?&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&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; data wilcox1;&lt;BR /&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; %do k=1 %to 4;&lt;BR /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %sysfunc(cat(wil_stat,&amp;amp;k)) = resolve('&amp;amp;&amp;amp;wilstat&amp;amp;k');&lt;BR /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %sysfunc(cat(p_val,&amp;amp;k)) = resolve('&amp;amp;&amp;amp;pval&amp;amp;k');&lt;BR /&gt; &lt;BR /&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;&lt;BR /&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; output;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;Thanks in advance.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 28 Feb 2014 18:54:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/using-sysfunc-cat/m-p/191075#M36040</guid>
      <dc:creator>JohnV</dc:creator>
      <dc:date>2014-02-28T18:54:37Z</dc:date>
    </item>
    <item>
      <title>Re: using %sysfunc(cat() )</title>
      <link>https://communities.sas.com/t5/SAS-Programming/using-sysfunc-cat/m-p/191076#M36041</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Not sure I'm following.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You have macro variables &amp;amp;wilstat1 &amp;amp;wilstat2 &amp;amp;wilstat3 &amp;amp;wilstat4 already with numeric values and you want to make a one record data set with variables with same name?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Using your approach, could be something like:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data wilcox1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; %do k=1 %to 4;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; wil_stat&amp;amp;k=&amp;amp;&amp;amp;wilstat&amp;amp;k;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p_val&amp;amp;k=&amp;amp;&amp;amp;p_val&amp;amp;k;&lt;/P&gt;&lt;P&gt;&amp;nbsp; %end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;THat should generate code like:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data wilcox1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; wil_stat1=10;&lt;/P&gt;&lt;P&gt;&amp;nbsp; p_val1=.10;&lt;/P&gt;&lt;P&gt;&amp;nbsp; wil_stat2=20;&lt;/P&gt;&lt;P&gt;&amp;nbsp; p_val2=.20;&lt;/P&gt;&lt;P&gt;&amp;nbsp; ...&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;does that help?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Usually it's easier to the have procedure (NPAR1WAY) write the dataset for you, and manipulate that, rather than reading a lot of values into macro variables, only to put them back into a dataset.&amp;nbsp; Esp as you may be losing precision in the process.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 28 Feb 2014 20:02:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/using-sysfunc-cat/m-p/191076#M36041</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2014-02-28T20:02:43Z</dc:date>
    </item>
    <item>
      <title>Re: using %sysfunc(cat() )</title>
      <link>https://communities.sas.com/t5/SAS-Programming/using-sysfunc-cat/m-p/191077#M36042</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I don't see an error in how you're writing your cat functions, except I wonder why you need the resolve. Of course this all assumes you're in a macro, which you haven't shown.&lt;/P&gt;&lt;P&gt;To determine why you have errors in the first place, please post the log with your errors. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;That being said, this is definitely not the most efficient or effective way of solving this problem.&lt;/P&gt;&lt;P&gt;If you want a more efficient solution, perhaps post the problem you're trying to solve.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 28 Feb 2014 20:14:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/using-sysfunc-cat/m-p/191077#M36042</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2014-02-28T20:14:16Z</dc:date>
    </item>
    <item>
      <title>Re: using %sysfunc(cat() )</title>
      <link>https://communities.sas.com/t5/SAS-Programming/using-sysfunc-cat/m-p/191078#M36043</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;There isn't any need to use CAT() functions on macro variables.&amp;nbsp; Just reference the macro variables.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;There isn't any need to use macro variables to move data from one dataset to another. Just use normal data step statements.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Can you show what the source dataset that you used to generate the macro variables looks like and what the final dataset your want to create looks like?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 28 Feb 2014 20:48:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/using-sysfunc-cat/m-p/191078#M36043</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2014-02-28T20:48:35Z</dc:date>
    </item>
    <item>
      <title>Re: using %sysfunc(cat() )</title>
      <link>https://communities.sas.com/t5/SAS-Programming/using-sysfunc-cat/m-p/191079#M36044</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Explanation of your error as the proper fix was covered by Quentin&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;As with data step DO loops, the %DO also ends by iterating one beyond the end of loop criterion. So at the end of the %do loop &amp;amp;K is effectively 5. You can create a dataset with a do loop and not drop the counter variable and see for yourself.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So the issue with your code is that the macro first writes the following code during macro compilation phase and then executes this datastep code:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data wilcox1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wil_stat1=resolve('&amp;amp;&amp;amp;wilstat&amp;amp;k');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p_val4=resolve('&amp;amp;&amp;amp;pval&amp;amp;k');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;That is, the resolve function resolves macro variable at data step execution phase rather than macro compilation phase as it was within your %sysfunc.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So timeliness wise, since the data step is executed after the macro code has been resolved, your code effectively turns into this conceptual hardcoded datastep with only macro variables:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data wilcox1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wil_stat1=&amp;amp;wilstat5;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p_val1=&amp;amp;pval5;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wil_stat1=&amp;amp;wilstat5;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p_val1=&amp;amp;pval5;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wil_stat1=&amp;amp;wilstat5;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p_val1=&amp;amp;pval5;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wil_stat1=&amp;amp;wilstat5;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p_val1=&amp;amp;pval5;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So the error lies in using the resolve function and the corrections were covered by Quentin and Reeza.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 28 Feb 2014 20:50:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/using-sysfunc-cat/m-p/191079#M36044</guid>
      <dc:creator>Vince28_Statcan</dc:creator>
      <dc:date>2014-02-28T20:50:15Z</dc:date>
    </item>
  </channel>
</rss>

