<?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: Looping or using array within Proc sql in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417286#M102496</link>
    <description>&lt;P&gt;Try this, i hope I understand you correctly.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%let n=3; *You need to change this to 30;

*Note: You have to populate n1 to n30 and use each of your 30 variables;

%let n1=Food;
%let n2=Beverage;
%let n3=Dunno;

%macro Test;
%do i=1 %to &amp;amp;n;
proc sql;
create table IPw_&amp;amp;i  as  
    select *, (exp(sum(log(1+&amp;amp;&amp;amp;n&amp;amp;i. / 100))))-1 as &amp;amp;&amp;amp;n&amp;amp;i._1 format=percent8.2
    from _temp
    group by yr, wk
    having day=max(day)
    order by dates ;
quit;
%end;
%mend;
options mprint;
%Test;

* Or you can do this, so you only have 1 output table

%macro Test_Take2;
%do i=1 %to &amp;amp;n;
%if %eval(&amp;amp;n=1) %then %do;
proc sql;
create table IPw  as  
    select *, (exp(sum(log(1+&amp;amp;&amp;amp;n&amp;amp;i. / 100))))-1 as &amp;amp;&amp;amp;n&amp;amp;i._1 format=percent8.2
    from _temp
    group by yr, wk
    having day=max(day)
    order by dates ;
quit;
%end;


%if %eval(&amp;amp;n&amp;gt;1) %then %do;
proc sql;
create table IPw  as  
    select *, (exp(sum(log(1+&amp;amp;&amp;amp;n&amp;amp;i. / 100))))-1 as &amp;amp;&amp;amp;n&amp;amp;i._1 format=percent8.2
    from IPw
    group by yr, wk
    having day=max(day)
    order by dates ;
quit;
%end;
%end;
%mend;


options mprint;
%Test_Take2;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Thu, 30 Nov 2017 02:21:14 GMT</pubDate>
    <dc:creator>ShiroAmada</dc:creator>
    <dc:date>2017-11-30T02:21:14Z</dc:date>
    <item>
      <title>Looping or using array within Proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417279#M102495</link>
      <description>&lt;P&gt;Hi Communities,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I hope you could help me to solve the problem below.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here is my code:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;proc sql;&lt;BR /&gt;create table IPw&amp;nbsp; as &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;select *, (exp(sum(log(1+Food/100))))-1 as Food1 format=percent8.2&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;from _temp&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;group by yr, wk&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;having day=max(day)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;order by dates ;&lt;BR /&gt;quit;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;My _temp table has 30 columns named by different industries (e.g. Food as can bee seen from previous code), and I need to apply the same operation, e.g calculated (exp(sum(log(1+Food/100)))) -1, to the rest of 29 columns. I'm thinking about creating an array variable which store values of my 30 columns, but I cannot work it out.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Looping the Proc sql seems to be slow as the table has to be read 30 times.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Could you please suggest a new code.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Many thanks,&lt;/P&gt;
&lt;P&gt;Mai&lt;/P&gt;</description>
      <pubDate>Thu, 30 Nov 2017 00:56:58 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417279#M102495</guid>
      <dc:creator>q5pham</dc:creator>
      <dc:date>2017-11-30T00:56:58Z</dc:date>
    </item>
    <item>
      <title>Re: Looping or using array within Proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417286#M102496</link>
      <description>&lt;P&gt;Try this, i hope I understand you correctly.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%let n=3; *You need to change this to 30;

*Note: You have to populate n1 to n30 and use each of your 30 variables;

%let n1=Food;
%let n2=Beverage;
%let n3=Dunno;

%macro Test;
%do i=1 %to &amp;amp;n;
proc sql;
create table IPw_&amp;amp;i  as  
    select *, (exp(sum(log(1+&amp;amp;&amp;amp;n&amp;amp;i. / 100))))-1 as &amp;amp;&amp;amp;n&amp;amp;i._1 format=percent8.2
    from _temp
    group by yr, wk
    having day=max(day)
    order by dates ;
quit;
%end;
%mend;
options mprint;
%Test;

* Or you can do this, so you only have 1 output table

%macro Test_Take2;
%do i=1 %to &amp;amp;n;
%if %eval(&amp;amp;n=1) %then %do;
proc sql;
create table IPw  as  
    select *, (exp(sum(log(1+&amp;amp;&amp;amp;n&amp;amp;i. / 100))))-1 as &amp;amp;&amp;amp;n&amp;amp;i._1 format=percent8.2
    from _temp
    group by yr, wk
    having day=max(day)
    order by dates ;
quit;
%end;


%if %eval(&amp;amp;n&amp;gt;1) %then %do;
proc sql;
create table IPw  as  
    select *, (exp(sum(log(1+&amp;amp;&amp;amp;n&amp;amp;i. / 100))))-1 as &amp;amp;&amp;amp;n&amp;amp;i._1 format=percent8.2
    from IPw
    group by yr, wk
    having day=max(day)
    order by dates ;
quit;
%end;
%end;
%mend;


options mprint;
%Test_Take2;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 30 Nov 2017 02:21:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417286#M102496</guid>
      <dc:creator>ShiroAmada</dc:creator>
      <dc:date>2017-11-30T02:21:14Z</dc:date>
    </item>
    <item>
      <title>Re: Looping or using array within Proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417292#M102501</link>
      <description>&lt;P&gt;Something like this :&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sort data=_temp; by yr wk day; run;

data ipw;
array s food1 power1 ... music1; /* Match industry variable list */ 
do until(last.wk);
    set _temp; by yr wk;
    array ind food -- music;
    do i = 1 to dim(ind);
        s{i} = sum(s{i}, log(1+(ind{i}/100)));
        end;
    end;
do i = 1 to dim(ind);
    s{i} = exp(s{i}) - 1;
    end;
drop i;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 30 Nov 2017 03:01:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417292#M102501</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2017-11-30T03:01:19Z</dc:date>
    </item>
    <item>
      <title>Re: Looping or using array within Proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417293#M102502</link>
      <description>&lt;P&gt;Like this?&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%* Create test data;
data HAVE;
  retain FOOD 1 WATER 1 SODA 0 JUNKFOOD 0 YR 1 WK 1 DAY 1 DATES 1;
run;

%let varlist= FOOD WATER SODA JUNKFOOD;
option mprint;
 
proc sql;
  create table IPW  as  
  select * 
              %macro loop; %local i varname; %do i=1 %to 4; %let varname=%scan(&amp;amp;varlist,&amp;amp;i);
        ,(exp(sum(log(1+&amp;amp;varname/100))))-1 as &amp;amp;varname.1 format=percent8.2
              %end; %mend; %loop
  from HAVE
  group by YR, WK
  having DAY=max(day)
  order by DATES ;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 30 Nov 2017 03:06:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417293#M102502</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2017-11-30T03:06:39Z</dc:date>
    </item>
    <item>
      <title>Re: Looping or using array within Proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417298#M102504</link>
      <description>&lt;P&gt;Thank you all very much for your quick and efficient replies.&lt;/P&gt;</description>
      <pubDate>Thu, 30 Nov 2017 03:42:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417298#M102504</guid>
      <dc:creator>q5pham</dc:creator>
      <dc:date>2017-11-30T03:42:19Z</dc:date>
    </item>
    <item>
      <title>Re: Looping or using array within Proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417299#M102505</link>
      <description>&lt;P&gt;Hi PGStats,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Since I don't need values of existing columns Food--music, instead of creating new array S of food1,.., music1, I would like to re-use these variables, so i use ind{i} instead of s{i}. That also saves me typing 30 elements of the array s.&amp;nbsp; But the result are not right. Any hints? Thanks, Mai&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE class=" language-sas"&gt;&lt;CODE class="  language-sas"&gt;&lt;SPAN class="token procnames"&gt;data&lt;/SPAN&gt; ipw&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;

do until&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;last&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;wk&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="token keyword"&gt;set&lt;/SPAN&gt; _temp&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt; &lt;SPAN class="token statement"&gt;by&lt;/SPAN&gt; yr wk&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="token statement"&gt;array&lt;/SPAN&gt; ind food &lt;SPAN class="token operator"&gt;-&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;-&lt;/SPAN&gt; music&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
    do i &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token number"&gt;1&lt;/SPAN&gt; to &lt;SPAN class="token function"&gt;dim&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;ind&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
        ind&lt;SPAN class="token punctuation"&gt;{&lt;/SPAN&gt;i&lt;SPAN class="token punctuation"&gt;}&lt;/SPAN&gt; &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;sum&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;ind&lt;SPAN class="token punctuation"&gt;{&lt;/SPAN&gt;i&lt;SPAN class="token punctuation"&gt;}&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;,&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;log&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token number"&gt;1&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;+&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;ind&lt;SPAN class="token punctuation"&gt;{&lt;/SPAN&gt;i&lt;SPAN class="token punctuation"&gt;}&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;/&lt;/SPAN&gt;&lt;SPAN class="token number"&gt;100&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
        end&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
    end&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
do i &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token number"&gt;1&lt;/SPAN&gt; to &lt;SPAN class="token function"&gt;dim&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;ind&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
    ind&lt;SPAN class="token punctuation"&gt;{&lt;/SPAN&gt;i&lt;SPAN class="token punctuation"&gt;}&lt;/SPAN&gt; &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;exp&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(ind&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;{&lt;/SPAN&gt;i&lt;SPAN class="token punctuation"&gt;}&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token operator"&gt;-&lt;/SPAN&gt; &lt;SPAN class="token number"&gt;1&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
    end&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="token keyword"&gt;drop&lt;/SPAN&gt; i&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="token procnames"&gt;run&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 30 Nov 2017 03:45:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417299#M102505</guid>
      <dc:creator>q5pham</dc:creator>
      <dc:date>2017-11-30T03:45:36Z</dc:date>
    </item>
    <item>
      <title>Re: Looping or using array within Proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417301#M102507</link>
      <description>&lt;P&gt;Try this:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sort data=_temp; by yr wk day; run;

data ipw;
array _s{99};
do until(last.wk);
    set _temp; by yr wk;
    array ind food -- music;
    do i = 1 to dim(ind);
        _s{i} = sum(_s{i}, log(1+(ind{i}/100)));
        end;
    end;
do i = 1 to dim(ind);
    ind{i} = exp(_s{i}) - 1;
    end;
drop i _s: ;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 30 Nov 2017 03:52:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417301#M102507</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2017-11-30T03:52:20Z</dc:date>
    </item>
    <item>
      <title>Re: Looping or using array within Proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417303#M102508</link>
      <description>&lt;P&gt;Thank you so much PGStats!&lt;/P&gt;</description>
      <pubDate>Thu, 30 Nov 2017 04:00:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417303#M102508</guid>
      <dc:creator>q5pham</dc:creator>
      <dc:date>2017-11-30T04:00:27Z</dc:date>
    </item>
    <item>
      <title>Re: Looping or using array within Proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417608#M102590</link>
      <description>&lt;P&gt;Hi ChrizNZ,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The syntax for a macro running inside proc sql is new to me. Do you have a link for a detailed guideline. I tried to use your code, but got a syntax error. Thanks, Mai&lt;/P&gt;</description>
      <pubDate>Thu, 30 Nov 2017 22:49:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417608#M102590</guid>
      <dc:creator>q5pham</dc:creator>
      <dc:date>2017-11-30T22:49:34Z</dc:date>
    </item>
    <item>
      <title>Re: Looping or using array within Proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417610#M102591</link>
      <description>&lt;P&gt;I just copied and pasted the code and it runs fine.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;25 &lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;26 %* Create test data;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;27 data HAVE;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;28 retain FOOD 1 WATER 1 SODA 0 JUNKFOOD 0 YR 1 WK 1 DAY 1 DATES 1;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;29 run;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;NOTE: The data set WORK.HAVE has 1 observations and 8 variables.&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;NOTE: Compressing data set WORK.HAVE increased size by 100.00 percent. &lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt; Compressed is 2 pages; un-compressed would require 1 pages.&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;NOTE: DATA statement used (Total process time):&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt; real time 0.06 seconds&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt; user cpu time 0.00 seconds&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt; system cpu time 0.00 seconds&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt; memory 479.06k&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt; OS Memory 48232.00k&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt; Timestamp 12/01/2017 11:51:51 AM&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt; Step Count 188 Switch Count 34&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;30 &lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;31 %let varlist= FOOD WATER SODA JUNKFOOD;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;32 option mprint;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;33 &lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;34 proc sql;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;35 create table IPW as&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;36 select *&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;2 The SAS System 10:50 Wednesday, November 29, 2017&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;37 %macro loop; %local i varname; %do i=1 %to 4; %let varname=%scan(&amp;amp;varlist,&amp;amp;i);&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;38 ,(exp(sum(log(1+&amp;amp;varname/100))))-1 as &amp;amp;varname.1 format=percent8.2&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;39 %end; %mend; %loop&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;MLOGIC(LOOP): Beginning execution.&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;MLOGIC(LOOP): %LOCAL I VARNAME&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;MLOGIC(LOOP): %DO loop beginning; index variable I; start value is 1; stop value is 4; by value is 1. &lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;MLOGIC(LOOP): %LET (variable name is VARNAME)&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;SYMBOLGEN: Macro variable VARLIST resolves to FOOD WATER SODA JUNKFOOD&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;SYMBOLGEN: Macro variable I resolves to 1&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;SYMBOLGEN: Macro variable VARNAME resolves to FOOD&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;SYMBOLGEN: Macro variable VARNAME resolves to FOOD&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;MLOGIC(LOOP): %DO loop index variable I is now 2; loop will iterate again.&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;MLOGIC(LOOP): %LET (variable name is VARNAME)&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;SYMBOLGEN: Macro variable VARLIST resolves to FOOD WATER SODA JUNKFOOD&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;SYMBOLGEN: Macro variable I resolves to 2&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;SYMBOLGEN: Macro variable VARNAME resolves to WATER&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;SYMBOLGEN: Macro variable VARNAME resolves to WATER&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;MLOGIC(LOOP): %DO loop index variable I is now 3; loop will iterate again.&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;MLOGIC(LOOP): %LET (variable name is VARNAME)&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;SYMBOLGEN: Macro variable VARLIST resolves to FOOD WATER SODA JUNKFOOD&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;SYMBOLGEN: Macro variable I resolves to 3&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;SYMBOLGEN: Macro variable VARNAME resolves to SODA&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;SYMBOLGEN: Macro variable VARNAME resolves to SODA&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;MLOGIC(LOOP): %DO loop index variable I is now 4; loop will iterate again.&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;MLOGIC(LOOP): %LET (variable name is VARNAME)&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;SYMBOLGEN: Macro variable VARLIST resolves to FOOD WATER SODA JUNKFOOD&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;SYMBOLGEN: Macro variable I resolves to 4&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;SYMBOLGEN: Macro variable VARNAME resolves to JUNKFOOD&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;SYMBOLGEN: Macro variable VARNAME resolves to JUNKFOOD&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;MLOGIC(LOOP): %DO loop index variable I is now 5; loop will not iterate again.&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;MPRINT(LOOP): * ,(exp(sum(log(1+FOOD/100))))-1 as FOOD1 format=percent8.2 ,(exp(sum(log(1+WATER/100))))-1 as WATER1 &lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;format=percent8.2 ,(exp(sum(log(1+SODA/100))))-1 as SODA1 format=percent8.2 ,(exp(sum(log(1+JUNKFOOD/100))))-1 as JUNKFOOD1 &lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;format=percent8.2&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;MLOGIC(LOOP): Ending execution.&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;40 from HAVE&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;41 group by YR, WK&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;42 having DAY=max(day)&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;43 order by DATES ;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;NOTE: The query requires remerging summary statistics back with the original data.&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;NOTE: Compressing data set WORK.IPW increased size by 100.00 percent. &lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt; Compressed is 2 pages; un-compressed would require 1 pages.&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;NOTE: Table WORK.IPW created, with 1 rows and 12 columns.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;44 quit;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;NOTE: PROCEDURE SQL used (Total process time):&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt; real time 0.09 seconds&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt; user cpu time 0.01 seconds&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt; system cpu time 0.00 seconds&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt; memory 9664.34k&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt; OS Memory 55268.00k&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt; Timestamp 12/01/2017 11:51:51 AM&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt; Step Count 189 Switch Count 134&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 30 Nov 2017 22:53:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417610#M102591</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2017-11-30T22:53:36Z</dc:date>
    </item>
    <item>
      <title>Re: Looping or using array within Proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417611#M102592</link>
      <description>&lt;P&gt;Hi Shiro,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thanks for your responses. I had the same thought as shown your approach initially, however I was reluctant as my table has to be re-read 30 times.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Mai&lt;/P&gt;</description>
      <pubDate>Thu, 30 Nov 2017 22:54:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417611#M102592</guid>
      <dc:creator>q5pham</dc:creator>
      <dc:date>2017-11-30T22:54:23Z</dc:date>
    </item>
    <item>
      <title>Re: Looping or using array within Proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417612#M102593</link>
      <description>&lt;P&gt;Macros are&amp;nbsp;usually used as language generators.&lt;/P&gt;
&lt;P&gt;As such they can be used anywhere.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 30 Nov 2017 22:54:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417612#M102593</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2017-11-30T22:54:39Z</dc:date>
    </item>
    <item>
      <title>Re: Looping or using array within Proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417614#M102595</link>
      <description>&lt;P&gt;Hi ChrisNZ,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I tried to use your code without your tested data:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;%let varlist= FOOD BEER SMOKE;&lt;BR /&gt;option mprint;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;proc sql;&lt;BR /&gt;&amp;nbsp; create table IPW&amp;nbsp; as &amp;nbsp;&lt;BR /&gt;&amp;nbsp; select * &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; %macro loop; %local i varname; %do i=1 %to 4; %let varname=%scan(&amp;amp;varlist,&amp;amp;i);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,(exp(sum(log(1+&amp;amp;varname/100))))-1 as &amp;amp;varname.1 format=percent8.2&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; %end; %mend; %loop&lt;BR /&gt;&amp;nbsp; from IP&lt;BR /&gt;&amp;nbsp; group by YR, WK&lt;BR /&gt;&amp;nbsp; having DAY=max(day)&lt;BR /&gt;&amp;nbsp; order by DATES ;&lt;BR /&gt;quit;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;And here is the log file:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;NOTE: Line generated by the invoked macro "LOOP".&lt;BR /&gt;34&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; ,(exp(sum(log(1+&amp;amp;varname/100))))-1 as &amp;amp;varname.1 format=percent8.2&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;&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;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;&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; 22&lt;BR /&gt;ERROR 22-322: Syntax error, expecting one of the following: a name, a quoted string, a numeric constant, a datetime constant, &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; a missing value, BTRIM, INPUT, PUT, SUBSTRING, USER. &amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;NOTE: Line generated by the macro variable "VARNAME".&lt;BR /&gt;34&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&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; _&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; 22&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; 76&lt;BR /&gt;MPRINT(LOOP):&amp;nbsp;&amp;nbsp; * ,(exp(sum(log(1+FOOD/100))))-1 as FOOD1 format=percent8.2 ,(exp(sum(log(1+BEER/100))))-1 as BEER1 &lt;BR /&gt;format=percent8.2 ,(exp(sum(log(1+SMOKE/100))))-1 as SMOKE1 format=percent8.2 ,(exp(sum(log(1+/100) )))-1 as 1 format=percent8.2&lt;BR /&gt;ERROR 22-322: Expecting a name. &amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;ERROR 76-322: Syntax error, statement will be ignored.&lt;BR /&gt;&lt;BR /&gt;35&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from IP&lt;BR /&gt;36&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; group by YR, WK&lt;BR /&gt;37&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; having DAY=max(day)&lt;BR /&gt;38&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; order by DATES ;&lt;BR /&gt;NOTE: PROC SQL set option NOEXEC and will continue to check the syntax of statements.&lt;BR /&gt;2&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;&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; The SAS System&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; 16:48 Monday, November 27, 2017&lt;BR /&gt;&lt;BR /&gt;39&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; quit;&lt;BR /&gt;NOTE: The SAS System stopped processing this step because of errors.&lt;BR /&gt;NOTE: PROCEDURE SQL used (Total process time):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; real time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.00 seconds&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cpu time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.00 seconds&lt;/P&gt;</description>
      <pubDate>Thu, 30 Nov 2017 22:59:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417614#M102595</guid>
      <dc:creator>q5pham</dc:creator>
      <dc:date>2017-11-30T22:59:32Z</dc:date>
    </item>
    <item>
      <title>Re: Looping or using array within Proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417617#M102597</link>
      <description>&lt;P&gt;Ooops, I forgot to change the loop. The correct log file should be:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;25&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GOPTIONS ACCESSIBLE;&lt;BR /&gt;26&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let varlist= FOOD BEER SMOKE;&lt;BR /&gt;27&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; option mprint;&lt;BR /&gt;28&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;29&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; proc sql;&lt;BR /&gt;30&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create table IPW&amp;nbsp; as&lt;BR /&gt;31&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select *&lt;BR /&gt;32&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; %macro loop; %local i varname; %do i=1 %to 3; %let varname=%scan(&amp;amp;varlist,&amp;amp;i);&lt;BR /&gt;33&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; ,(exp(sum(log(1+&amp;amp;varname/100))))-1 as &amp;amp;varname.1 format=percent8.2&lt;BR /&gt;34&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; %mend; %loop&lt;BR /&gt;MPRINT(LOOP):&amp;nbsp;&amp;nbsp; * ,(exp(sum(log(1+FOOD/100))))-1 as FOOD1 format=percent8.2 ,(exp(sum(log(1+BEER/100))))-1 as BEER1 &lt;BR /&gt;format=percent8.2 ,(exp(sum(log(1+SMOKE/100))))-1 as SMOKE1 format=percent8.2&lt;BR /&gt;35&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from IP&lt;BR /&gt;36&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; group by YR, WK&lt;BR /&gt;37&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; having DAY=max(day)&lt;BR /&gt;38&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; order by DATES ;&lt;BR /&gt;ERROR: The following columns were not found in the contributing tables: DAY, WK, YR.&lt;BR /&gt;NOTE: PROC SQL set option NOEXEC and will continue to check the syntax of statements.&lt;BR /&gt;39&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; quit;&lt;BR /&gt;NOTE: The SAS System stopped processing this step because of errors.&lt;BR /&gt;NOTE: PROCEDURE SQL used (Total process time):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; real time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.00 seconds&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cpu time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.00 seconds&lt;/P&gt;</description>
      <pubDate>Thu, 30 Nov 2017 23:05:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417617#M102597</guid>
      <dc:creator>q5pham</dc:creator>
      <dc:date>2017-11-30T23:05:52Z</dc:date>
    </item>
    <item>
      <title>Re: Looping or using array within Proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417638#M102602</link>
      <description>&lt;P&gt;The error message is unambiguous:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;ERROR: The following columns were not found in the contributing tables: DAY, WK, YR.&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 01 Dec 2017 02:30:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417638#M102602</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2017-12-01T02:30:45Z</dc:date>
    </item>
    <item>
      <title>Re: Looping or using array within Proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417639#M102603</link>
      <description>&lt;P&gt;Hi ChrisNZ,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I found a mistake in my table. The code is running as desired.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thanks for sharing another way of solving my issue.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Cheers, Mai&lt;/P&gt;</description>
      <pubDate>Fri, 01 Dec 2017 02:40:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/417639#M102603</guid>
      <dc:creator>q5pham</dc:creator>
      <dc:date>2017-12-01T02:40:23Z</dc:date>
    </item>
    <item>
      <title>Re: Looping or using array within Proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/419012#M102988</link>
      <description>&lt;P&gt;Hi ChrisNZ,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I would like to use your code in a similar case, but I got errors. The tast is simply to scale down all columns (numeric format), except the first, by 100. Could you please help to correct for me. Thank you very much. Mai&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;proc contents&lt;BR /&gt;data = MP&lt;BR /&gt;out = test (keep = name varnum);&lt;BR /&gt;run;&lt;BR /&gt;proc sql ; &lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;select distinct name &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;into : varlist separated by ' ' from test&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;where varnum not in (1),&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; %macro loop; %local i varname; %do i=1 %to dim(&amp;amp;varlist); %let varname=%scan(&amp;amp;varlist,&amp;amp;i);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,(&amp;amp;varname/100) as &amp;amp;varname&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; %end; %mend; %loop&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;from test &lt;BR /&gt;&lt;BR /&gt;quit;&lt;/P&gt;</description>
      <pubDate>Thu, 07 Dec 2017 00:10:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/419012#M102988</guid>
      <dc:creator>q5pham</dc:creator>
      <dc:date>2017-12-07T00:10:01Z</dc:date>
    </item>
    <item>
      <title>Re: Looping or using array within Proc sql</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/419034#M103000</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/29283"&gt;@q5pham&lt;/a&gt;&amp;nbsp;Turn on option mprint then look at the invalid SQL&amp;nbsp;query you are generating. The issue should become obvious.&lt;/P&gt;</description>
      <pubDate>Thu, 07 Dec 2017 01:50:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Looping-or-using-array-within-Proc-sql/m-p/419034#M103000</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2017-12-07T01:50:11Z</dc:date>
    </item>
  </channel>
</rss>

