<?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: Do loop for a macro of optimization in Mathematical Optimization, Discrete-Event Simulation, and OR</title>
    <link>https://communities.sas.com/t5/Mathematical-Optimization/Do-loop-for-a-macro-of-optimization/m-p/233373#M1163</link>
    <description>&lt;P&gt;Hi Rob,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;thank you for the code, this way it is more efficient because I don't have to recalculate the variance covariance matrix every time (among other things).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I am almost done with my questions and jus want to ask a last one: how to extract the &lt;STRONG&gt;variance&lt;/STRONG&gt; and the &lt;STRONG&gt;return&lt;/STRONG&gt; and put them into tables?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To create the data tables for the weights I do the following:&lt;/P&gt;
&lt;P&gt;create data weights from [i]=(&lt;STRONG&gt;1..&lt;/STRONG&gt;&amp;amp;VARCOUNT) xopt=x ;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;But I don't know how to for variance and return. Tried different things but still didn't work.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you!!!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Fri, 06 Nov 2015 00:22:53 GMT</pubDate>
    <dc:creator>ilikesas</dc:creator>
    <dc:date>2015-11-06T00:22:53Z</dc:date>
    <item>
      <title>Do loop for a macro of optimization</title>
      <link>https://communities.sas.com/t5/Mathematical-Optimization/Do-loop-for-a-macro-of-optimization/m-p/232841#M1155</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I have macro for finding the stock weights that will give me the smallest variance for a given return. It works fine, but when I want to do a do loop like this I get the weights for several returns, it breaks down. Here is the optimization part of the macro where I want to do a do loop:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;%do n=1 %to 5;&lt;BR /&gt;PROC OPTMODEL;&lt;/P&gt;
&lt;P&gt;VAR X&amp;amp;n{1..&amp;amp;VARCOUNT} &amp;gt;= 0;&lt;BR /&gt;NUM COEFF{1..&amp;amp;VARCOUNT, 1..&amp;amp;VARCOUNT} = [ %DO I = 1 %TO &amp;amp;VARCOUNT;&lt;BR /&gt;%DO J = 1 %TO &amp;amp;VARCOUNT; &lt;BR /&gt;&amp;amp;&amp;amp;COEFF&amp;amp;I&amp;amp;J %END; %END; ];&lt;BR /&gt;NUM R{1..&amp;amp;VARCOUNT}=[ %DO I = 1 %TO &amp;amp;VARCOUNT; &amp;amp;&amp;amp;MEAN&amp;amp;I %END; ];&lt;/P&gt;
&lt;P&gt;/* MINIMIZE THE VARIANCE OF THE PORTFOLIO’S TOTAL RETURN */&lt;BR /&gt;MINIMIZE F = SUM{I IN 1..&amp;amp;VARCOUNT, J IN 1..&amp;amp;VARCOUNT}COEFF[I,J]*X[I]*X[J];&lt;BR /&gt;/* SUBJECT TO THE FOLLOWING CONSTRAINTS */ &lt;BR /&gt;CON BUDGET: SUM{I IN 1..&amp;amp;VARCOUNT}X[I] = 1; &lt;BR /&gt;CON GROWTH: SUM{I IN 1..&amp;amp;VARCOUNT}R[I]*X[I] = 0.05*n;&lt;BR /&gt; SOLVE WITH QP;&lt;BR /&gt;/*create a data table for the weights of the optimal portfolio*/&lt;BR /&gt; create data weights from [i]=(1..&amp;amp;VARCOUNT) xopt=x&amp;amp;n ;&lt;BR /&gt; PRINT X&amp;amp;n;&lt;BR /&gt; %end ;&lt;BR /&gt;%MEND;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;So here I want to find the weights for 5 returns: 0.05, 0.1, 0.15, 0.2, 0.25&lt;/P&gt;
&lt;P&gt;I tried different ways to do this with the do loop but always get an error message, so could you please help me to put the do loop part correctly because I believe that I misplaced some elements of it.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you very much!!!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 03 Nov 2015 02:01:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Mathematical-Optimization/Do-loop-for-a-macro-of-optimization/m-p/232841#M1155</guid>
      <dc:creator>ilikesas</dc:creator>
      <dc:date>2015-11-03T02:01:42Z</dc:date>
    </item>
    <item>
      <title>Re: Do loop for a macro of optimization</title>
      <link>https://communities.sas.com/t5/Mathematical-Optimization/Do-loop-for-a-macro-of-optimization/m-p/232852#M1156</link>
      <description>&lt;P&gt;So what's the error message?&lt;/P&gt;
&lt;P&gt;options symbolgen mprint; helps debug your macro.&lt;/P&gt;</description>
      <pubDate>Tue, 03 Nov 2015 06:58:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Mathematical-Optimization/Do-loop-for-a-macro-of-optimization/m-p/232852#M1156</guid>
      <dc:creator>LinusH</dc:creator>
      <dc:date>2015-11-03T06:58:13Z</dc:date>
    </item>
    <item>
      <title>Re: Do loop for a macro of optimization</title>
      <link>https://communities.sas.com/t5/Mathematical-Optimization/Do-loop-for-a-macro-of-optimization/m-p/232875#M1157</link>
      <description>Better to use the looping functionality inside PROC OPTMODEL instead of macro looping that calls PROC OPTMODEL several times.  For example, see:&lt;BR /&gt;&lt;A href="http://support.sas.com/documentation/cdl/en/ormpex/68157/HTML/default/viewer.htm#ormpex_ex22_toc.htm" target="_blank"&gt;http://support.sas.com/documentation/cdl/en/ormpex/68157/HTML/default/viewer.htm#ormpex_ex22_toc.htm&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;That way, you declare parameters, read data, and declare model elements only once.</description>
      <pubDate>Tue, 03 Nov 2015 12:11:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Mathematical-Optimization/Do-loop-for-a-macro-of-optimization/m-p/232875#M1157</guid>
      <dc:creator>RobPratt</dc:creator>
      <dc:date>2015-11-03T12:11:00Z</dc:date>
    </item>
    <item>
      <title>Re: Do loop for a macro of optimization</title>
      <link>https://communities.sas.com/t5/Mathematical-Optimization/Do-loop-for-a-macro-of-optimization/m-p/233012#M1158</link>
      <description>&lt;P&gt;Hi Rob,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I actually did tried doing the loop for the code that you gave me the other day for the optimization without the macro. Here it is:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;PROC OPTMODEL;&lt;BR /&gt; set &amp;lt;str&amp;gt; returns;&lt;BR /&gt; read data contents into returns=[NAME];&lt;BR /&gt; VAR X{returns} &amp;gt;= 0;&lt;BR /&gt; NUM COEFF{returns, returns};&lt;BR /&gt; read data covtable into [i=_NAME_] {j in returns} &amp;lt;coeff[i,j]=col(j)&amp;gt;;&lt;BR /&gt; NUM R{returns};&lt;BR /&gt; read data meantable into {j in returns} &amp;lt;r[j]=col(j)&amp;gt;;&lt;BR /&gt; /* MINIMIZE THE VARIANCE OF THE PORTFOLIO’S TOTAL RETURN */&lt;BR /&gt; &lt;STRONG&gt;do k=1 to 5;&lt;/STRONG&gt;&lt;BR /&gt; MINIMIZE F = SUM{I IN returns, J IN returns}COEFF[I,J]*X[I]*X[J];&lt;BR /&gt; /* SUBJECT TO THE FOLLOWING CONSTRAINTS */&lt;BR /&gt; CON BUDGET: SUM{I IN returns}X[I] = 1;&lt;BR /&gt; CON GROWTH: SUM{I IN returns}R[I]*X[I] = 0.05&lt;STRONG&gt;*k&lt;/STRONG&gt;;&lt;BR /&gt; SOLVE;&lt;BR /&gt; PRINT X;&lt;BR /&gt; print (sqrt(F/10000^2));&lt;BR /&gt;&lt;STRONG&gt;end;&lt;/STRONG&gt;&lt;BR /&gt;quit;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I get an error message that the symbol k is unknown and this error entails other error messages. Could you please help me with the syntax becasue intuitively my code makes sense to me. Please note that I already ran the macro and as such got the variance covariance matrix &amp;nbsp;and all other data which is necessary for the optimizaiton computation, its somewhere in the do loop where the problem lies.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you! &amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 04 Nov 2015 02:02:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Mathematical-Optimization/Do-loop-for-a-macro-of-optimization/m-p/233012#M1158</guid>
      <dc:creator>ilikesas</dc:creator>
      <dc:date>2015-11-04T02:02:14Z</dc:date>
    </item>
    <item>
      <title>Re: Do loop for a macro of optimization</title>
      <link>https://communities.sas.com/t5/Mathematical-Optimization/Do-loop-for-a-macro-of-optimization/m-p/233013#M1159</link>
      <description>You must declare k before you can use it in the constraint right-hand side:&lt;BR /&gt;num k;&lt;BR /&gt;&lt;BR /&gt;And you cannot have declarations inside the loop.  Please see the linked example.</description>
      <pubDate>Wed, 04 Nov 2015 02:13:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Mathematical-Optimization/Do-loop-for-a-macro-of-optimization/m-p/233013#M1159</guid>
      <dc:creator>RobPratt</dc:creator>
      <dc:date>2015-11-04T02:13:18Z</dc:date>
    </item>
    <item>
      <title>Re: Do loop for a macro of optimization</title>
      <link>https://communities.sas.com/t5/Mathematical-Optimization/Do-loop-for-a-macro-of-optimization/m-p/233198#M1160</link>
      <description>&lt;P&gt;Hi Rob,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I went to the example that you refered to but found it complicated; the "do loop variable" garage was somehow integrated into the matrix language and I couldn't realize how to do something similar for my case.&lt;/P&gt;
&lt;P&gt;At the end I managed to do something not so elegant but I think it gave me the result that I needed:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;%MACRO a(FILE);&lt;BR /&gt;&lt;STRONG&gt;num k;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;%do k = 1 %to 5;&lt;/STRONG&gt;&lt;BR /&gt;/*EXTRACTION OF CONTENTS*/&lt;BR /&gt;PROC CONTENTS DATA = &amp;amp;FILE /*in my example data there is no date!!!*/ OUT = CONTENTS(KEEP = NAME) NOPRINT; &lt;BR /&gt;RUN;&lt;BR /&gt;/*SETTING THE VARIABLES*/&lt;BR /&gt;DATA _NULL_; &lt;BR /&gt;SET CONTENTS; &lt;BR /&gt;CALL SYMPUT('VAR'||TRIM(LEFT(_N_)),name); &lt;BR /&gt;CALL SYMPUT('VARCOUNT',TRIM(LEFT(_N_))); &lt;BR /&gt;RUN;&lt;BR /&gt;/*CALCULATING THE VARIANCE COVARIANCE TABLE*/&lt;BR /&gt;PROC CORR DATA = &amp;amp;FILE OUT=CORRTABLE(WHERE=(UPCASE(_TYPE_) IN ("COV","MEAN"))) COV NOSIMPLE NOPRINT;&lt;BR /&gt;VAR %DO I = 1 %TO &amp;amp;VARCOUNT; &amp;amp;&amp;amp;VAR&amp;amp;I %END; ; &lt;BR /&gt;WITH %DO I = 1 %TO &amp;amp;VARCOUNT; &amp;amp;&amp;amp;VAR&amp;amp;I %END; ; &lt;BR /&gt;RUN;&lt;/P&gt;
&lt;P&gt;/*COVARIANCE TABLE AND MEAN TABLE*/&lt;BR /&gt;DATA COVTABLE MEANTABLE; SET CORRTABLE; &lt;BR /&gt;IF UPCASE(_TYPE_) IN ("MEAN") THEN OUTPUT MEANTABLE; &lt;BR /&gt;ELSE OUTPUT COVTABLE; &lt;BR /&gt;RUN;&lt;/P&gt;
&lt;P&gt;/*ASSIGNING THE COVARIANCE VALUES*/&lt;BR /&gt;DATA _NULL_; SET COVTABLE(DROP = _TYPE_ _NAME_);&lt;BR /&gt;ARRAY X{&amp;amp;VARCOUNT} %DO I = 1 %TO &amp;amp;VARCOUNT; &amp;amp;&amp;amp;VAR&amp;amp;I %END; ;&lt;BR /&gt;DO I = 1 TO &amp;amp;VARCOUNT;&lt;BR /&gt;CALL SYMPUT('COEFF'||TRIM(LEFT(_N_))||TRIM(LEFT(I)),X{I}); END;&lt;BR /&gt;RUN;&lt;BR /&gt;/*ASSIGNING THE MEAN VALUES*/&lt;/P&gt;
&lt;P&gt;DATA _NULL_; SET MEANTABLE(DROP = _TYPE_ _NAME_);&lt;BR /&gt;ARRAY X{&amp;amp;VARCOUNT} %DO I = 1 %TO &amp;amp;VARCOUNT; &amp;amp;&amp;amp;VAR&amp;amp;I %END; ;&lt;BR /&gt;DO I = 1 TO &amp;amp;VARCOUNT;&lt;BR /&gt;CALL SYMPUT('MEAN'||TRIM(LEFT(I)),X{I}); END;&lt;BR /&gt;RUN;&lt;/P&gt;
&lt;P&gt;/*OPTIMIZATION SECTION*/&lt;BR /&gt;PROC OPTMODEL;&lt;BR /&gt;VAR &lt;STRONG&gt;X&amp;amp;k&lt;/STRONG&gt;{1..&amp;amp;VARCOUNT} &amp;gt;= 0;&lt;BR /&gt;NUM COEFF{1..&amp;amp;VARCOUNT, 1..&amp;amp;VARCOUNT} = [ %DO I = 1 %TO &amp;amp;VARCOUNT;&lt;BR /&gt;%DO J = 1 %TO &amp;amp;VARCOUNT; &lt;BR /&gt;&amp;amp;&amp;amp;COEFF&amp;amp;I&amp;amp;J %END; %END; ];&lt;BR /&gt;NUM R{1..&amp;amp;VARCOUNT}=[ %DO I = 1 %TO &amp;amp;VARCOUNT; &amp;amp;&amp;amp;MEAN&amp;amp;I %END; ];&lt;BR /&gt;/* MINIMIZE THE VARIANCE OF THE PORTFOLIO’S TOTAL RETURN */&lt;BR /&gt;MINIMIZE &lt;STRONG&gt;F&amp;amp;k&lt;/STRONG&gt; = SUM{I IN 1..&amp;amp;VARCOUNT, J IN 1..&amp;amp;VARCOUNT}COEFF[I,J]*&lt;STRONG&gt;X&amp;amp;k&lt;/STRONG&gt;[I]*&lt;STRONG&gt;X&amp;amp;k&lt;/STRONG&gt;[J];&lt;BR /&gt;/* SUBJECT TO THE FOLLOWING CONSTRAINTS */ &lt;BR /&gt;CON &lt;STRONG&gt;BUDGET&amp;amp;k&lt;/STRONG&gt;: SUM{I IN 1..&amp;amp;VARCOUNT}X&amp;amp;k[I] = 1; &lt;BR /&gt;CON &lt;STRONG&gt;GROWTH&amp;amp;k&lt;/STRONG&gt;: SUM{I IN 1..&amp;amp;VARCOUNT}R[I]*&lt;STRONG&gt;X&amp;amp;k&lt;/STRONG&gt;[I] = 0.05*&lt;STRONG&gt;&amp;amp;k&lt;/STRONG&gt;;&lt;BR /&gt; SOLVE WITH QP;&lt;BR /&gt;/*create a data table for the weights of the optimal portfolio*/&lt;BR /&gt; create data &lt;STRONG&gt;weights&amp;amp;k&lt;/STRONG&gt; from [i]=(1..&amp;amp;VARCOUNT) &lt;STRONG&gt;xopt&amp;amp;k=x&amp;amp;k&lt;/STRONG&gt; ;&lt;BR /&gt; %end;&lt;BR /&gt;%MEND;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Could you please help me extracting the F&amp;amp;k and the GROWTH&amp;amp;k like this I can put them later into a single table and create the efficient frontier graph.&lt;/P&gt;
&lt;P&gt;I tried doing:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;create data return&amp;amp;k from growth&amp;amp;k xopt&amp;amp;k=growth&amp;amp;k ;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;but received an error message that "the symbol growth may not be used here"&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you very much!!!&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 05 Nov 2015 03:21:02 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Mathematical-Optimization/Do-loop-for-a-macro-of-optimization/m-p/233198#M1160</guid>
      <dc:creator>ilikesas</dc:creator>
      <dc:date>2015-11-05T03:21:02Z</dc:date>
    </item>
    <item>
      <title>Re: Do loop for a macro of optimization</title>
      <link>https://communities.sas.com/t5/Mathematical-Optimization/Do-loop-for-a-macro-of-optimization/m-p/233351#M1162</link>
      <description>&lt;P&gt;Below is a way to do the looping without using the macro language. &amp;nbsp;Note that k is declared before it is used in the constraint, and no declarations appear within the loop. &amp;nbsp;Regarding the error message, I suspect that you intended&amp;nbsp;to use the .BODY constraint suffix.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;PROC OPTMODEL;
   set &amp;lt;str&amp;gt; returns;
   read data contents into returns=[NAME];
   VAR X{returns} &amp;gt;= 0;
   NUM COEFF{returns, returns};
   read data covtable into [i=_NAME_] {j in returns} &amp;lt;coeff[i,j]=col(j)&amp;gt;;
   NUM R{returns};
   read data meantable into {j in returns} &amp;lt;r[j]=col(j)&amp;gt;;
   num k;
   /* MINIMIZE THE VARIANCE OF THE PORTFOLIO’S TOTAL RETURN */
   MINIMIZE F = SUM{I IN returns, J IN returns}COEFF[I,J]*X[I]*X[J];
   /* SUBJECT TO THE FOLLOWING CONSTRAINTS */
   CON BUDGET: SUM{I IN returns}X[I] = 1;
   CON GROWTH: SUM{I IN returns}R[I]*X[I] = 0.05*k;
   do k=1 to 5;
      put k=;
      SOLVE;
      PRINT X;&lt;BR /&gt;      print (sqrt(F/10000^2));
   end;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 05 Nov 2015 21:16:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Mathematical-Optimization/Do-loop-for-a-macro-of-optimization/m-p/233351#M1162</guid>
      <dc:creator>RobPratt</dc:creator>
      <dc:date>2015-11-05T21:16:27Z</dc:date>
    </item>
    <item>
      <title>Re: Do loop for a macro of optimization</title>
      <link>https://communities.sas.com/t5/Mathematical-Optimization/Do-loop-for-a-macro-of-optimization/m-p/233373#M1163</link>
      <description>&lt;P&gt;Hi Rob,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;thank you for the code, this way it is more efficient because I don't have to recalculate the variance covariance matrix every time (among other things).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I am almost done with my questions and jus want to ask a last one: how to extract the &lt;STRONG&gt;variance&lt;/STRONG&gt; and the &lt;STRONG&gt;return&lt;/STRONG&gt; and put them into tables?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To create the data tables for the weights I do the following:&lt;/P&gt;
&lt;P&gt;create data weights from [i]=(&lt;STRONG&gt;1..&lt;/STRONG&gt;&amp;amp;VARCOUNT) xopt=x ;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;But I don't know how to for variance and return. Tried different things but still didn't work.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you!!!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 06 Nov 2015 00:22:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Mathematical-Optimization/Do-loop-for-a-macro-of-optimization/m-p/233373#M1163</guid>
      <dc:creator>ilikesas</dc:creator>
      <dc:date>2015-11-06T00:22:53Z</dc:date>
    </item>
    <item>
      <title>Re: Do loop for a macro of optimization</title>
      <link>https://communities.sas.com/t5/Mathematical-Optimization/Do-loop-for-a-macro-of-optimization/m-p/234119#M1165</link>
      <description>&lt;P&gt;Here's how you can write the variance (F) values to a data set. &amp;nbsp;You can modify the code to get whatever additional values you want.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;PROC OPTMODEL;
   set &amp;lt;str&amp;gt; returns;
   read data contents into returns=[NAME];
   VAR X{returns} &amp;gt;= 0;
   NUM COEFF{returns, returns};
   read data covtable into [i=_NAME_] {j in returns} &amp;lt;coeff[i,j]=col(j)&amp;gt;;
   NUM R{returns};
   read data meantable into {j in returns} &amp;lt;r[j]=col(j)&amp;gt;;
   num k;
   /* MINIMIZE THE VARIANCE OF THE PORTFOLIO’S TOTAL RETURN */
   MINIMIZE F = SUM{I IN returns, J IN returns}COEFF[I,J]*X[I]*X[J];
   /* SUBJECT TO THE FOLLOWING CONSTRAINTS */
   CON BUDGET: SUM{I IN returns}X[I] = 1;
   CON GROWTH: SUM{I IN returns}R[I]*X[I] = 0.05*k;
   set KSET = 1..5;
   num Fsol {KSET};
   do k=KSET;
      put k=;
      SOLVE;
      PRINT X;
      Fsol[k] = F.sol;
   end;
   create data soldata from [k] Fsol;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 10 Nov 2015 21:53:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Mathematical-Optimization/Do-loop-for-a-macro-of-optimization/m-p/234119#M1165</guid>
      <dc:creator>RobPratt</dc:creator>
      <dc:date>2015-11-10T21:53:19Z</dc:date>
    </item>
  </channel>
</rss>

