<?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: portfolio optimization - extracting the optimal variance in Mathematical Optimization, Discrete-Event Simulation, and OR</title>
    <link>https://communities.sas.com/t5/Mathematical-Optimization/portfolio-optimization-extracting-the-optimal-variance/m-p/230656#M1131</link>
    <description>&lt;P&gt;Hi RobPratt,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I did the Print F and the result that I got is&amp;nbsp;SAS Output&lt;/P&gt;
&lt;DIV class="branch"&gt;
&lt;DIV&gt;
&lt;DIV align="center"&gt;
&lt;TABLE class="table" summary="Procedure Optmodel: Solution Summary" frame="box" rules="all" cellspacing="0" cellpadding="5"&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="r b header" scope="col"&gt;F&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;
&lt;P&gt;694025835&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This is weired becasue I double chequed with Excel and the weights that I obtain in SAS are the same as those that I obtain from Excel so they are correct, but the portfolio stdev in Excel is 2.63 ?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Also, I tried saving my weights into a data set by doing something like&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;create data weights from xopt=x ;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;but this didn't give me any new data set....&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you!&lt;/P&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;</description>
    <pubDate>Mon, 19 Oct 2015 23:00:40 GMT</pubDate>
    <dc:creator>ilikesas</dc:creator>
    <dc:date>2015-10-19T23:00:40Z</dc:date>
    <item>
      <title>portfolio optimization - extracting the optimal variance</title>
      <link>https://communities.sas.com/t5/Mathematical-Optimization/portfolio-optimization-extracting-the-optimal-variance/m-p/230520#M1129</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;here is a part of a macro that I did to find the optimal portfolio with a smallest variance for a given rate of return:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;/*OPTIMIZATION SECTION*/&lt;/P&gt;
&lt;P&gt;PROC OPTMODEL;&lt;/P&gt;
&lt;P&gt;VAR X{&lt;STRONG&gt;1..&lt;/STRONG&gt;&amp;amp;VARCOUNT} &amp;gt;= &lt;STRONG&gt;0&lt;/STRONG&gt;;&lt;/P&gt;
&lt;P&gt;NUM COEFF{&lt;STRONG&gt;1..&lt;/STRONG&gt;&amp;amp;VARCOUNT, &lt;STRONG&gt;1..&lt;/STRONG&gt;&amp;amp;VARCOUNT} = [ %DO I = &lt;STRONG&gt;1&lt;/STRONG&gt; %TO &amp;amp;VARCOUNT;&lt;/P&gt;
&lt;P&gt;%DO J = &lt;STRONG&gt;1&lt;/STRONG&gt; %TO &amp;amp;VARCOUNT;&lt;/P&gt;
&lt;P&gt;&amp;amp;&amp;amp;COEFF&amp;amp;I&amp;amp;J %END; %END; ];&lt;/P&gt;
&lt;P&gt;NUM R{&lt;STRONG&gt;1..&lt;/STRONG&gt;&amp;amp;VARCOUNT}=[ %DO I = &lt;STRONG&gt;1&lt;/STRONG&gt; %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;/P&gt;
&lt;P&gt;MINIMIZE F = SUM{I IN &lt;STRONG&gt;1..&lt;/STRONG&gt;&amp;amp;VARCOUNT, J IN &lt;STRONG&gt;1..&lt;/STRONG&gt;&amp;amp;VARCOUNT}COEFF[I,J]*X[I]*X[J];&lt;/P&gt;
&lt;P&gt;/* SUBJECT TO THE FOLLOWING CONSTRAINTS */&lt;/P&gt;
&lt;P&gt;CON BUDGET: SUM{I IN &lt;STRONG&gt;1..&lt;/STRONG&gt;&amp;amp;VARCOUNT}X[I] = &lt;STRONG&gt;10000&lt;/STRONG&gt;;&lt;/P&gt;
&lt;P&gt;CON GROWTH: SUM{I IN &lt;STRONG&gt;1..&lt;/STRONG&gt;&amp;amp;VARCOUNT}R[I]*X[I] = &lt;STRONG&gt;500&lt;/STRONG&gt;;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;SOLVE WITH QP;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;PRINT X;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This macro works fine and it gives me the optimal solution, but how do I extract the actual variance of the portfolio which it calculated and which is supposed to be the minimal variance for a given return?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thnak you!&lt;/P&gt;</description>
      <pubDate>Mon, 19 Oct 2015 03:11:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Mathematical-Optimization/portfolio-optimization-extracting-the-optimal-variance/m-p/230520#M1129</guid>
      <dc:creator>ilikesas</dc:creator>
      <dc:date>2015-10-19T03:11:11Z</dc:date>
    </item>
    <item>
      <title>Re: portfolio optimization - extracting the optimal variance</title>
      <link>https://communities.sas.com/t5/Mathematical-Optimization/portfolio-optimization-extracting-the-optimal-variance/m-p/230572#M1130</link>
      <description>The objective function is F.  You can display its value in the listing by using the PRINT statement, like you did for X:&lt;BR /&gt;&lt;BR /&gt;print F;&lt;BR /&gt;&lt;BR /&gt;You can also save its value to a macro variable or a data set.</description>
      <pubDate>Mon, 19 Oct 2015 13:24:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Mathematical-Optimization/portfolio-optimization-extracting-the-optimal-variance/m-p/230572#M1130</guid>
      <dc:creator>RobPratt</dc:creator>
      <dc:date>2015-10-19T13:24:23Z</dc:date>
    </item>
    <item>
      <title>Re: portfolio optimization - extracting the optimal variance</title>
      <link>https://communities.sas.com/t5/Mathematical-Optimization/portfolio-optimization-extracting-the-optimal-variance/m-p/230656#M1131</link>
      <description>&lt;P&gt;Hi RobPratt,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I did the Print F and the result that I got is&amp;nbsp;SAS Output&lt;/P&gt;
&lt;DIV class="branch"&gt;
&lt;DIV&gt;
&lt;DIV align="center"&gt;
&lt;TABLE class="table" summary="Procedure Optmodel: Solution Summary" frame="box" rules="all" cellspacing="0" cellpadding="5"&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="r b header" scope="col"&gt;F&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;
&lt;P&gt;694025835&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This is weired becasue I double chequed with Excel and the weights that I obtain in SAS are the same as those that I obtain from Excel so they are correct, but the portfolio stdev in Excel is 2.63 ?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Also, I tried saving my weights into a data set by doing something like&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;create data weights from xopt=x ;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;but this didn't give me any new data set....&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you!&lt;/P&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;</description>
      <pubDate>Mon, 19 Oct 2015 23:00:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Mathematical-Optimization/portfolio-optimization-extracting-the-optimal-variance/m-p/230656#M1131</guid>
      <dc:creator>ilikesas</dc:creator>
      <dc:date>2015-10-19T23:00:40Z</dc:date>
    </item>
    <item>
      <title>Re: portfolio optimization - extracting the optimal variance</title>
      <link>https://communities.sas.com/t5/Mathematical-Optimization/portfolio-optimization-extracting-the-optimal-variance/m-p/230745#M1133</link>
      <description>&lt;P&gt;Please attach your full code and data.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Correct syntax for CREATE DATA is:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;create data weights from [i]=(1..&amp;amp;VARCOUNT) xopt=x ;&lt;/P&gt;</description>
      <pubDate>Tue, 20 Oct 2015 14:13:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Mathematical-Optimization/portfolio-optimization-extracting-the-optimal-variance/m-p/230745#M1133</guid>
      <dc:creator>RobPratt</dc:creator>
      <dc:date>2015-10-20T14:13:13Z</dc:date>
    </item>
    <item>
      <title>Re: portfolio optimization - extracting the optimal variance</title>
      <link>https://communities.sas.com/t5/Mathematical-Optimization/portfolio-optimization-extracting-the-optimal-variance/m-p/230853#M1135</link>
      <description>&lt;P&gt;Hi RobPratt,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;here is my data and the macro code:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;data&lt;/STRONG&gt; returns;&lt;/P&gt;
&lt;P&gt;input a b c;&lt;/P&gt;
&lt;P&gt;datalines;&lt;/P&gt;
&lt;P&gt;10 2 5&lt;/P&gt;
&lt;P&gt;3 -5 7&lt;/P&gt;
&lt;P&gt;-1 -7 6&lt;/P&gt;
&lt;P&gt;1 3 -2&lt;/P&gt;
&lt;P&gt;;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;%MACRO&lt;/STRONG&gt; a(FILE);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;/*EXTRACTION OF CONTENTS*/&lt;/P&gt;
&lt;P&gt;PROC CONTENTS DATA = &amp;amp;FILE /*in my example data there is no date!!!*/ OUT = CONTENTS(KEEP = NAME) NOPRINT;&lt;/P&gt;
&lt;P&gt;RUN;&lt;/P&gt;
&lt;P&gt;/*SETTING THE VARIABLES*/&lt;/P&gt;
&lt;P&gt;DATA _NULL_;&lt;/P&gt;
&lt;P&gt;SET CONTENTS;&lt;/P&gt;
&lt;P&gt;CALL SYMPUT('VAR'||TRIM(LEFT(_N_)),name);&lt;/P&gt;
&lt;P&gt;CALL SYMPUT('VARCOUNT',TRIM(LEFT(_N_)));&lt;/P&gt;
&lt;P&gt;RUN;&lt;/P&gt;
&lt;P&gt;/*CALCULATING THE VARIANCE COVARIANCE TABLE*/&lt;/P&gt;
&lt;P&gt;PROC CORR DATA = &amp;amp;FILE OUT=CORRTABLE(WHERE=(UPCASE(_TYPE_) IN ("COV","MEAN"))) COV NOSIMPLE NOPRINT;&lt;/P&gt;
&lt;P&gt;VAR %DO I = &lt;STRONG&gt;1&lt;/STRONG&gt; %TO &amp;amp;VARCOUNT; &amp;amp;&amp;amp;VAR&amp;amp;I %END; ;&lt;/P&gt;
&lt;P&gt;WITH %DO I = &lt;STRONG&gt;1&lt;/STRONG&gt; %TO &amp;amp;VARCOUNT; &amp;amp;&amp;amp;VAR&amp;amp;I %END; ;&lt;/P&gt;
&lt;P&gt;RUN;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;/*COVARIANCE TABLE AND MEAN TABLE*/&lt;/P&gt;
&lt;P&gt;DATA COVTABLE MEANTABLE; SET CORRTABLE;&lt;/P&gt;
&lt;P&gt;IF UPCASE(_TYPE_) IN ("MEAN") THEN OUTPUT MEANTABLE;&lt;/P&gt;
&lt;P&gt;ELSE OUTPUT COVTABLE;&lt;/P&gt;
&lt;P&gt;RUN;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;/*ASSIGNING THE COVARIANCE VALUES*/&lt;/P&gt;
&lt;P&gt;DATA _NULL_; SET COVTABLE(DROP = _TYPE_ _NAME_);&lt;/P&gt;
&lt;P&gt;ARRAY X{&amp;amp;VARCOUNT} %DO I = &lt;STRONG&gt;1&lt;/STRONG&gt; %TO &amp;amp;VARCOUNT; &amp;amp;&amp;amp;VAR&amp;amp;I %END; ;&lt;/P&gt;
&lt;P&gt;DO I = &lt;STRONG&gt;1&lt;/STRONG&gt; TO &amp;amp;VARCOUNT;&lt;/P&gt;
&lt;P&gt;CALL SYMPUT('COEFF'||TRIM(LEFT(_N_))||TRIM(LEFT(I)),X{I}); END;&lt;/P&gt;
&lt;P&gt;RUN;&lt;/P&gt;
&lt;P&gt;/*ASSIGNING THE MEAN VALUES*/&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;DATA _NULL_; SET MEANTABLE(DROP = _TYPE_ _NAME_);&lt;/P&gt;
&lt;P&gt;ARRAY X{&amp;amp;VARCOUNT} %DO I = &lt;STRONG&gt;1&lt;/STRONG&gt; %TO &amp;amp;VARCOUNT; &amp;amp;&amp;amp;VAR&amp;amp;I %END; ;&lt;/P&gt;
&lt;P&gt;DO I = &lt;STRONG&gt;1&lt;/STRONG&gt; TO &amp;amp;VARCOUNT;&lt;/P&gt;
&lt;P&gt;CALL SYMPUT('MEAN'||TRIM(LEFT(I)),X{I}); END;&lt;/P&gt;
&lt;P&gt;RUN;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;/*OPTIMIZATION SECTION*/&lt;/P&gt;
&lt;P&gt;PROC OPTMODEL;&lt;/P&gt;
&lt;P&gt;VAR X{&lt;STRONG&gt;1..&lt;/STRONG&gt;&amp;amp;VARCOUNT} &amp;gt;= &lt;STRONG&gt;0&lt;/STRONG&gt;;&lt;/P&gt;
&lt;P&gt;NUM COEFF{&lt;STRONG&gt;1..&lt;/STRONG&gt;&amp;amp;VARCOUNT, &lt;STRONG&gt;1..&lt;/STRONG&gt;&amp;amp;VARCOUNT} = [ %DO I = &lt;STRONG&gt;1&lt;/STRONG&gt; %TO &amp;amp;VARCOUNT;&lt;/P&gt;
&lt;P&gt;%DO J = &lt;STRONG&gt;1&lt;/STRONG&gt; %TO &amp;amp;VARCOUNT;&lt;/P&gt;
&lt;P&gt;&amp;amp;&amp;amp;COEFF&amp;amp;I&amp;amp;J %END; %END; ];&lt;/P&gt;
&lt;P&gt;NUM R{&lt;STRONG&gt;1..&lt;/STRONG&gt;&amp;amp;VARCOUNT}=[ %DO I = &lt;STRONG&gt;1&lt;/STRONG&gt; %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;/P&gt;
&lt;P&gt;MINIMIZE F = SUM{I IN &lt;STRONG&gt;1..&lt;/STRONG&gt;&amp;amp;VARCOUNT, J IN &lt;STRONG&gt;1..&lt;/STRONG&gt;&amp;amp;VARCOUNT}COEFF[I,J]*X[I]*X[J];&lt;/P&gt;
&lt;P&gt;/* SUBJECT TO THE FOLLOWING CONSTRAINTS */&lt;/P&gt;
&lt;P&gt;CON BUDGET: SUM{I IN &lt;STRONG&gt;1..&lt;/STRONG&gt;&amp;amp;VARCOUNT}X[I] = &lt;STRONG&gt;10000&lt;/STRONG&gt;;&lt;/P&gt;
&lt;P&gt;CON GROWTH: SUM{I IN &lt;STRONG&gt;1..&lt;/STRONG&gt;&amp;amp;VARCOUNT}R[I]*X[I] = &lt;STRONG&gt;500&lt;/STRONG&gt;;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;SOLVE WITH QP;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;PRINT X;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;%MEND&lt;/STRONG&gt;;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;%&lt;STRONG&gt;&lt;EM&gt;a&lt;/EM&gt;&lt;/STRONG&gt; (returns)&lt;/P&gt;</description>
      <pubDate>Wed, 21 Oct 2015 00:51:58 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Mathematical-Optimization/portfolio-optimization-extracting-the-optimal-variance/m-p/230853#M1135</guid>
      <dc:creator>ilikesas</dc:creator>
      <dc:date>2015-10-21T00:51:58Z</dc:date>
    </item>
    <item>
      <title>Re: portfolio optimization - extracting the optimal variance</title>
      <link>https://communities.sas.com/t5/Mathematical-Optimization/portfolio-optimization-extracting-the-optimal-variance/m-p/230957#M1136</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It appears that the portfolio standard deviation is calculated by post-processing the X values to sum to 1:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;for {i in 1..&amp;amp;varcount} X[i] = X[i]/10000;&lt;BR /&gt; print (sqrt(F));&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Alternatively, you can leave the X values alone and divide by the square of the budget:&lt;/P&gt;
&lt;P&gt;print (sqrt(F/10000^2));&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;SAS Output&lt;/P&gt;
&lt;DIV class="branch"&gt;
&lt;DIV&gt;
&lt;DIV align="center"&gt;
&lt;TABLE class="table" summary="Procedure Optmodel: PrintTable" frame="box" rules="all" cellspacing="0" cellpadding="5"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;2.6344&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;</description>
      <pubDate>Wed, 21 Oct 2015 15:10:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Mathematical-Optimization/portfolio-optimization-extracting-the-optimal-variance/m-p/230957#M1136</guid>
      <dc:creator>RobPratt</dc:creator>
      <dc:date>2015-10-21T15:10:12Z</dc:date>
    </item>
    <item>
      <title>Re: portfolio optimization - extracting the optimal variance</title>
      <link>https://communities.sas.com/t5/Mathematical-Optimization/portfolio-optimization-extracting-the-optimal-variance/m-p/230974#M1137</link>
      <description>&lt;P&gt;By the way, you can avoid all the macro language by instead reading the data sets directly in PROC OPTMODEL:&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; ASSETS;
   read data contents into ASSETS=[NAME];
   VAR X{ASSETS} &amp;gt;= 0;
   NUM COEFF{ASSETS, ASSETS};
   read data covtable into [i=_NAME_] {j in ASSETS} &amp;lt;coeff[i,j]=col(j)&amp;gt;;
   NUM R{ASSETS};
   read data meantable into {j in ASSETS} &amp;lt;r[j]=col(j)&amp;gt;;
   /* MINIMIZE THE VARIANCE OF THE PORTFOLIO’S TOTAL RETURN */
   MINIMIZE F = SUM{I IN ASSETS, J IN ASSETS}COEFF[I,J]*X[I]*X[J];
   /* SUBJECT TO THE FOLLOWING CONSTRAINTS */
   CON BUDGET: SUM{I IN ASSETS}X[I] = 10000;
   CON GROWTH: SUM{I IN ASSETS}R[I]*X[I] = 500;
   SOLVE;
   PRINT X;
   print (sqrt(F/10000^2));
quit;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 21 Oct 2015 15:11:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Mathematical-Optimization/portfolio-optimization-extracting-the-optimal-variance/m-p/230974#M1137</guid>
      <dc:creator>RobPratt</dc:creator>
      <dc:date>2015-10-21T15:11:15Z</dc:date>
    </item>
    <item>
      <title>Re: portfolio optimization - extracting the optimal variance</title>
      <link>https://communities.sas.com/t5/Mathematical-Optimization/portfolio-optimization-extracting-the-optimal-variance/m-p/231572#M1138</link>
      <description>&lt;P&gt;Hi RobPratt,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thanks a lot now SAS outputs the same stdev that I obtained from Excel!!!&lt;/P&gt;
&lt;P&gt;Also thank you for the code of putting the data set directly into proc optmodel without doing a macro!!!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You are helping me a lot so please allow me to ask you some more related questions &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;What I want to do now is for a given stdev to find the max return.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The actual code:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data returns;&lt;BR /&gt;input a b c;&lt;BR /&gt;datalines;&lt;BR /&gt;10 2 5&lt;BR /&gt;3 -5 7&lt;BR /&gt;-1 -7 6&lt;BR /&gt;1 3 -2&lt;BR /&gt;;&lt;BR /&gt;run;&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;/* Maximize the return */&lt;BR /&gt;maximize GROWTH= SUM{I IN returns}R[I]*X[I] ;&lt;BR /&gt;/* SUBJECT TO THE FOLLOWING CONSTRAINTS */&lt;BR /&gt; CON BUDGET: SUM{I IN returns}X[I] = 10000;&lt;BR /&gt; con var: SUM{I IN returns, J IN returns}COEFF[I,J]*X[I]*X[J] =4;&lt;BR /&gt; SOLVE;&lt;BR /&gt; PRINT X;&lt;BR /&gt; print growth;&lt;BR /&gt;quit;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;So here I have a budget of 10000 and want to find the max return for a variance = 4&lt;/P&gt;
&lt;P&gt;The result that I get is:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;SAS Output&lt;/P&gt;
&lt;DIV class="branch"&gt;
&lt;DIV&gt;
&lt;DIV align="center"&gt;
&lt;TABLE class="table" summary="Procedure Optmodel: Solution Summary" frame="box" rules="all" cellspacing="0" cellpadding="5"&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="l b header" scope="col"&gt;1]&lt;/TH&gt;
&lt;TH class="r b header" scope="col"&gt;X&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH class="l rowheader" scope="row"&gt;a&lt;/TH&gt;
&lt;TD class="r data"&gt;-822.39&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="l rowheader" scope="row"&gt;b&lt;/TH&gt;
&lt;TD class="r data"&gt;1145.79&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="l rowheader" scope="row"&gt;c&lt;/TH&gt;
&lt;TD class="r data"&gt;1212.73&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;BR /&gt;&lt;A name="IDX37" target="_blank"&gt;&lt;/A&gt;
&lt;DIV&gt;
&lt;DIV align="center"&gt;
&lt;TABLE class="table" summary="Procedure Optmodel: Solution Summary" frame="box" rules="all" cellspacing="0" cellpadding="5"&gt;&lt;COLGROUP&gt; &lt;COL /&gt;&lt;/COLGROUP&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="r b header" scope="col"&gt;GROWTH&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;173.01&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This is different from what I got in Excel because in Excel I assumed that there is no short selling (i.e, all weights are greater or equal to 0) and in this code I also mentioned '&lt;SPAN&gt;VAR X{returns} &amp;gt;= 0;'&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;So what I can't figure out is why a = -822.39 since the smallest weight that I can get is 0?&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Thank you very much!!!&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 26 Oct 2015 02:11:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Mathematical-Optimization/portfolio-optimization-extracting-the-optimal-variance/m-p/231572#M1138</guid>
      <dc:creator>ilikesas</dc:creator>
      <dc:date>2015-10-26T02:11:44Z</dc:date>
    </item>
    <item>
      <title>Re: portfolio optimization - extracting the optimal variance</title>
      <link>https://communities.sas.com/t5/Mathematical-Optimization/portfolio-optimization-extracting-the-optimal-variance/m-p/232270#M1148</link>
      <description>&lt;P&gt;You should see these NOTEs in the log:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;NOTE: Maximum number of iterations reached.&lt;BR /&gt;NOTE: Objective = 175.59076489.&lt;BR /&gt;NOTE: The least infeasible solution found is returned.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Also notice the positive value for Infeasibility in the Solution Summary:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;SAS Output&lt;/P&gt;
&lt;DIV class="branch"&gt;
&lt;DIV&gt;
&lt;DIV align="center"&gt;
&lt;TABLE class="table" summary="Procedure Optmodel: Solution Summary" frame="box" rules="all" cellspacing="0" cellpadding="5"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH class="l rowheader" scope="row"&gt;Infeasibility&lt;/TH&gt;
&lt;TD class="r data"&gt;8467.8268186&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;For your var constraint, try a less aggressive right-hand side like 4e8, which is on the order of the value from your earlier optimization. &amp;nbsp;Alternatively, change the right-hand side of your budget constraint to 1.&lt;/P&gt;</description>
      <pubDate>Thu, 29 Oct 2015 17:02:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Mathematical-Optimization/portfolio-optimization-extracting-the-optimal-variance/m-p/232270#M1148</guid>
      <dc:creator>RobPratt</dc:creator>
      <dc:date>2015-10-29T17:02:59Z</dc:date>
    </item>
    <item>
      <title>Re: portfolio optimization - extracting the optimal variance</title>
      <link>https://communities.sas.com/t5/Mathematical-Optimization/portfolio-optimization-extracting-the-optimal-variance/m-p/232368#M1150</link>
      <description>&lt;P&gt;Hi Rob,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I set the budget constraint =1 and left the variance = 4 as before and I managed to get the same result that Ecxel solver gave me.&lt;/P&gt;
&lt;P&gt;Here is the code:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data returns;&lt;BR /&gt;input a b c;&lt;BR /&gt;datalines;&lt;BR /&gt;10 2 5&lt;BR /&gt;3 -5 7&lt;BR /&gt;-1 -7 6&lt;BR /&gt;1 3 -2&lt;BR /&gt;;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;%MACRO a(FILE);&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;BR /&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;BR /&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;BR /&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;BR /&gt;/*OPTIMIZATION SECTION*/&lt;BR /&gt;PROC OPTMODEL;&lt;BR /&gt;VAR X{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;/*maximize the growth*/&lt;BR /&gt;maximize GROWTH= SUM{I IN 1..&amp;amp;VARCOUNT}R[I]*X[I];&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 f: SUM{I IN 1..&amp;amp;VARCOUNT, J IN 1..&amp;amp;VARCOUNT}COEFF[I,J]*X[I]*X[J] = 4 ;&lt;BR /&gt;SOLVE ;&lt;BR /&gt; PRINT X;&lt;BR /&gt; print growth;&lt;BR /&gt;%MEND;&lt;/P&gt;
&lt;P&gt;%a (returns);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;But now some other small issue appeared: the code that you wrote for doing the whole process without the macro works (at least when I tried it) only after I run the macro. When I opened SAS and wanted to find the optimal weights for my data with the macro-less code I got error messages such that data contents doesn't exist etc.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you!!!&lt;/P&gt;</description>
      <pubDate>Fri, 30 Oct 2015 03:07:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Mathematical-Optimization/portfolio-optimization-extracting-the-optimal-variance/m-p/232368#M1150</guid>
      <dc:creator>ilikesas</dc:creator>
      <dc:date>2015-10-30T03:07:56Z</dc:date>
    </item>
    <item>
      <title>Re: portfolio optimization - extracting the optimal variance</title>
      <link>https://communities.sas.com/t5/Mathematical-Optimization/portfolio-optimization-extracting-the-optimal-variance/m-p/232369#M1151</link>
      <description>&lt;P&gt;I meant that you don't need any macro language within the PROC OPTMODEL call, and you don't need to generate the MEAN&amp;amp;i and COEFF&amp;amp;i&amp;amp;j macro variables. &amp;nbsp;You do need to generate the meantable and covtable data sets before you can read them with the READ DATA statement in PROC OPTMODEL.&lt;/P&gt;</description>
      <pubDate>Fri, 30 Oct 2015 03:17:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Mathematical-Optimization/portfolio-optimization-extracting-the-optimal-variance/m-p/232369#M1151</guid>
      <dc:creator>RobPratt</dc:creator>
      <dc:date>2015-10-30T03:17:23Z</dc:date>
    </item>
  </channel>
</rss>

