<?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: Create organized table from OPTMODEL in Mathematical Optimization, Discrete-Event Simulation, and OR</title>
    <link>https://communities.sas.com/t5/Mathematical-Optimization/Create-organized-table-from-OPTMODEL/m-p/613938#M2945</link>
    <description>&lt;P&gt;Thank you Rob,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I also saw there is an easy way like this&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT style="background-color: #ffffff;"&gt;create data datasetname from&amp;nbsp; [_tail_ _head_] variables; &amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;</description>
    <pubDate>Thu, 26 Dec 2019 18:23:04 GMT</pubDate>
    <dc:creator>sebgon</dc:creator>
    <dc:date>2019-12-26T18:23:04Z</dc:date>
    <item>
      <title>Create organized table from OPTMODEL</title>
      <link>https://communities.sas.com/t5/Mathematical-Optimization/Create-organized-table-from-OPTMODEL/m-p/609216#M2925</link>
      <description>&lt;P&gt;Hi, I have the following optmodel&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;data arcdata;&lt;BR /&gt;input prod $ _tail_ $ _head_ $ _lo_ _capac_ _cost_ _km_ _d_;&lt;BR /&gt;datalines;&lt;BR /&gt;x 100 200 0 15 2 100 23&lt;BR /&gt;x 100 300 0 10 1 60 10&lt;BR /&gt;x 100 400 0 40 0 50 10&lt;BR /&gt;y 600 700 0 15 2 100 23&lt;BR /&gt;y 600 800 0 10 1 60 10&lt;BR /&gt;y 600 900 0 40 0 50 10&lt;BR /&gt;;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;%macro opttabla(TABLA);&lt;/P&gt;&lt;P&gt;PROC SQL;&lt;BR /&gt;CREATE TABLE WORK.LISTA AS&lt;BR /&gt;SELECT distinct PROD AS PROD&lt;BR /&gt;FROM WORK.&amp;amp;TABLA.;&lt;BR /&gt;QUIT;&lt;BR /&gt;&lt;BR /&gt;proc sql NOPRINT;&lt;BR /&gt;SELECT COUNT(prod) INTO: NUM_PROD FROM WORK.LISTA;&lt;BR /&gt;quit;&lt;/P&gt;&lt;P&gt;%do i=1 %to &amp;amp;NUM_PROD;&lt;BR /&gt;&lt;BR /&gt;DATA _NULL_;&lt;BR /&gt;SET WORK.LISTA(FIRSTOBS=&amp;amp;i OBS=&amp;amp;i);&lt;BR /&gt;CALL SYMPUTX ("PROD", PROD, 'G');&lt;BR /&gt;RUN;&lt;/P&gt;&lt;P&gt;proc sql;&lt;BR /&gt;create table arcdata_&amp;amp;i. as&lt;BR /&gt;select *&lt;BR /&gt;FROM WORK.arcdata&lt;BR /&gt;WHERE PROD="&amp;amp;PROD";&lt;BR /&gt;quit;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;proc optmodel printlevel=2;&lt;BR /&gt;ODS Output PrinTable=expt;&lt;BR /&gt;set &amp;lt;str,str&amp;gt; arcdatatemp&amp;amp;i;&lt;BR /&gt;num L {arcdatatemp&amp;amp;i};&lt;BR /&gt;num U {arcdatatemp&amp;amp;i};&lt;BR /&gt;num C {arcdatatemp&amp;amp;i};&lt;BR /&gt;num K {arcdatatemp&amp;amp;i};&lt;BR /&gt;num D {arcdatatemp&amp;amp;i};&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;read data arcdata_&amp;amp;i. into arcdatatemp&amp;amp;i=[_tail_ _head_]&lt;BR /&gt;L=_lo_ U=_capac_ C=_cost_ K=_km_ D=_d_;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;var x {&amp;lt;i,j&amp;gt; in arcdatatemp&amp;amp;i} &amp;gt;= L[i,j] &amp;lt;= U[i,j];&lt;BR /&gt;min obj = sum {&amp;lt;i,j&amp;gt; in arcdatatemp&amp;amp;i} C [i,j]* x[i,j];&lt;BR /&gt;min obj1 = sum {&amp;lt;i,j&amp;gt; in arcdatatemp&amp;amp;i} C[i,j]* K [i,j];&lt;BR /&gt;con sum {&amp;lt;i,j&amp;gt; in arcdatatemp&amp;amp;i} x[i,j] = sum {&amp;lt;i,j&amp;gt; in arcdatatemp&amp;amp;i} D[i,j];&lt;BR /&gt;con sum {&amp;lt;i,j&amp;gt; in arcdatatemp&amp;amp;i} x[i,j] &amp;lt;= sum {&amp;lt;i,j&amp;gt; in arcdatatemp&amp;amp;i} U[i,j];&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;solve with lp / algorithm=ns scale=none logfreq=1;&lt;BR /&gt;print x obj obj1;&lt;BR /&gt;%end;&lt;BR /&gt;%mend;&lt;/P&gt;&lt;P&gt;%opttabla(arcdata);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For the prod=y the print generated by default is this:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV&gt;&lt;DIV&gt;x&amp;nbsp; 700 800 900600 &lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;15&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;18&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;DIV&gt;obj obj1 &lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;40&lt;/TD&gt;&lt;TD&gt;260&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I would like to arrange it in an organized table like this&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;prod | _tail_ | _head_1 | head 2 | head 3 | obj | obj1&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;y&amp;nbsp; &amp;nbsp; &amp;nbsp;| 600&amp;nbsp; &amp;nbsp; &amp;nbsp;| 700&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| 800&amp;nbsp; &amp;nbsp; &amp;nbsp; | 900&amp;nbsp; &amp;nbsp; &amp;nbsp; | 40 | 260&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I saw some ODS output procedures from the documentation but none give something similar to the outcome that I need, is there a way that I could do that?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you very much for your help&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you very much for your help&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 04 Dec 2019 00:15:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Mathematical-Optimization/Create-organized-table-from-OPTMODEL/m-p/609216#M2925</guid>
      <dc:creator>sebgon</dc:creator>
      <dc:date>2019-12-04T00:15:07Z</dc:date>
    </item>
    <item>
      <title>Re: Create organized table from OPTMODEL</title>
      <link>https://communities.sas.com/t5/Mathematical-Optimization/Create-organized-table-from-OPTMODEL/m-p/609337#M2926</link>
      <description>&lt;P&gt;Better post it at OR forum .&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/1636"&gt;@RobPratt&lt;/a&gt;&amp;nbsp; is there .&lt;/P&gt;</description>
      <pubDate>Wed, 04 Dec 2019 11:43:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Mathematical-Optimization/Create-organized-table-from-OPTMODEL/m-p/609337#M2926</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2019-12-04T11:43:59Z</dc:date>
    </item>
    <item>
      <title>Re: Create organized table from OPTMODEL</title>
      <link>https://communities.sas.com/t5/Mathematical-Optimization/Create-organized-table-from-OPTMODEL/m-p/609448#M2927</link>
      <description>&lt;P&gt;Assuming each prod can have more than one _tail_, here's one way to get what you want:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;set TAILS = setof {&amp;lt;t,h&amp;gt; in arcdatatemp&amp;amp;i} t;
num numHeads {TAILS} init 0;
str head {t in TAILS, 1..numHeads[t]} init '';
for {&amp;lt;t,h&amp;gt; in arcdatatemp&amp;amp;i} do;
   numHeads[t] = numHeads[t] + 1;
   head[t,numHeads[t]] = h;
end;
num maxNumHeads = max {t in TAILS} numHeads[t];
create data mytable from [_tail_]=TAILS prod="&amp;amp;prod" 
   {j in 1..maxNumHeads} &amp;lt;col('_head_'||j)=head[_tail_,j]&amp;gt;
   obj obj1;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Note also that the runOptmodel action in SAS Viya 3.5 (just released on November 19) now supports &lt;A href="https://go.documentation.sas.com/?cdcId=pgmsascdc&amp;amp;cdcVersion=9.4_3.5&amp;amp;docsetId=casactmopt&amp;amp;docsetTarget=casactmopt_optimization_details05.htm&amp;amp;locale=en" target="_self"&gt;BY-group processing&lt;/A&gt;, which enables you to avoid the explicit loop that calls PROC OPTMODEL.&lt;/P&gt;</description>
      <pubDate>Wed, 04 Dec 2019 17:11:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Mathematical-Optimization/Create-organized-table-from-OPTMODEL/m-p/609448#M2927</guid>
      <dc:creator>RobPratt</dc:creator>
      <dc:date>2019-12-04T17:11:12Z</dc:date>
    </item>
    <item>
      <title>Re: Create organized table from OPTMODEL</title>
      <link>https://communities.sas.com/t5/Mathematical-Optimization/Create-organized-table-from-OPTMODEL/m-p/613938#M2945</link>
      <description>&lt;P&gt;Thank you Rob,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I also saw there is an easy way like this&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT style="background-color: #ffffff;"&gt;create data datasetname from&amp;nbsp; [_tail_ _head_] variables; &amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 26 Dec 2019 18:23:04 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Mathematical-Optimization/Create-organized-table-from-OPTMODEL/m-p/613938#M2945</guid>
      <dc:creator>sebgon</dc:creator>
      <dc:date>2019-12-26T18:23:04Z</dc:date>
    </item>
  </channel>
</rss>

