<?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: Iterative Excel Solver in SAS (By changing variable cells) in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Iterative-Excel-Solver-in-SAS-By-changing-variable-cells/m-p/544642#M150639</link>
    <description>&lt;P&gt;Thank you very very much, you solved a big issue here. Worked like a charm!&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Best regards,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Ricardo Soares&lt;/P&gt;</description>
    <pubDate>Wed, 20 Mar 2019 16:59:47 GMT</pubDate>
    <dc:creator>Baelin10</dc:creator>
    <dc:date>2019-03-20T16:59:47Z</dc:date>
    <item>
      <title>Iterative Excel Solver in SAS (By changing variable cells)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Iterative-Excel-Solver-in-SAS-By-changing-variable-cells/m-p/544363#M150547</link>
      <description>&lt;P&gt;Hello All&lt;/P&gt;&lt;P&gt;I'm trying to replicate in SAS a procedure I use in Excel. This procedure is basically an iterative solver (through a macro) that puts the variable Delta (OptVar - Ratio) to 0 by changing the values of the AuxVar (starting with null values).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The input data starts like this:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;ID&amp;nbsp; Num&amp;nbsp; &amp;nbsp; Ratio&amp;nbsp; &amp;nbsp; &amp;nbsp;AuxVar&amp;nbsp; &amp;nbsp;OptVar&amp;nbsp; Delta&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;0.166667&lt;/TD&gt;&lt;TD&gt;0.00%&lt;/TD&gt;&lt;TD&gt;0.00%&lt;/TD&gt;&lt;TD&gt;-0.1667&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;0.285714&lt;/TD&gt;&lt;TD&gt;0.00%&lt;/TD&gt;&lt;TD&gt;0.00%&lt;/TD&gt;&lt;TD&gt;-0.2857&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;0.285714&lt;/TD&gt;&lt;TD&gt;0.00%&lt;/TD&gt;&lt;TD&gt;0.00%&lt;/TD&gt;&lt;TD&gt;-0.2857&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;800&lt;/TD&gt;&lt;TD&gt;0.375&lt;/TD&gt;&lt;TD&gt;0.00%&lt;/TD&gt;&lt;TD&gt;0.00%&lt;/TD&gt;&lt;TD&gt;-0.3750&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;800&lt;/TD&gt;&lt;TD&gt;0.375&lt;/TD&gt;&lt;TD&gt;0.00%&lt;/TD&gt;&lt;TD&gt;0.00%&lt;/TD&gt;&lt;TD&gt;-0.3750&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;744&lt;/TD&gt;&lt;TD&gt;0.387097&lt;/TD&gt;&lt;TD&gt;0.00%&lt;/TD&gt;&lt;TD&gt;0.00%&lt;/TD&gt;&lt;TD&gt;-0.3871&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;744&lt;/TD&gt;&lt;TD&gt;0.387097&lt;/TD&gt;&lt;TD&gt;0.00%&lt;/TD&gt;&lt;TD&gt;0.00%&lt;/TD&gt;&lt;TD&gt;-0.3871&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;0.5&lt;/TD&gt;&lt;TD&gt;0.00%&lt;/TD&gt;&lt;TD&gt;0.00%&lt;/TD&gt;&lt;TD&gt;-0.5000&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;0.5&lt;/TD&gt;&lt;TD&gt;0.00%&lt;/TD&gt;&lt;TD&gt;0.00%&lt;/TD&gt;&lt;TD&gt;-0.5000&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- ID, Num and Ratio are inputs;&lt;/P&gt;&lt;P&gt;- AuxVar values are generated by Excel;&lt;/P&gt;&lt;P&gt;- OptVar is given by probit(0.975)*sqrt((AuxVar*(1-AuxVar))/Num)+AuxVar&lt;/P&gt;&lt;P&gt;- Delta is OptVar - Ratio&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The solver objective function is Delta, it operates by changing AuxVar values and the constraint is AuxVar greater or equal to 0. It runs for each cell.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;After the Solver Macro, the output is:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;ID&amp;nbsp; Num&amp;nbsp; &amp;nbsp; Ratio&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AuxVar&amp;nbsp; &amp;nbsp;OptVar&amp;nbsp; &amp;nbsp;Delta&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;0.166667&lt;/TD&gt;&lt;TD&gt;3.01%&lt;/TD&gt;&lt;TD&gt;16.67%&lt;/TD&gt;&lt;TD&gt;0.0000&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;0.285714&lt;/TD&gt;&lt;TD&gt;8.22%&lt;/TD&gt;&lt;TD&gt;28.57%&lt;/TD&gt;&lt;TD&gt;0.0000&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;0.285714&lt;/TD&gt;&lt;TD&gt;8.22%&lt;/TD&gt;&lt;TD&gt;28.57%&lt;/TD&gt;&lt;TD&gt;0.0000&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;800&lt;/TD&gt;&lt;TD&gt;0.375&lt;/TD&gt;&lt;TD&gt;34.21%&lt;/TD&gt;&lt;TD&gt;37.50%&lt;/TD&gt;&lt;TD&gt;0.0000&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;800&lt;/TD&gt;&lt;TD&gt;0.375&lt;/TD&gt;&lt;TD&gt;34.21%&lt;/TD&gt;&lt;TD&gt;37.50%&lt;/TD&gt;&lt;TD&gt;0.0000&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;744&lt;/TD&gt;&lt;TD&gt;0.387097&lt;/TD&gt;&lt;TD&gt;35.28%&lt;/TD&gt;&lt;TD&gt;38.71%&lt;/TD&gt;&lt;TD&gt;0.0000&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;744&lt;/TD&gt;&lt;TD&gt;0.387097&lt;/TD&gt;&lt;TD&gt;35.28%&lt;/TD&gt;&lt;TD&gt;38.71%&lt;/TD&gt;&lt;TD&gt;0.0000&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;0.5&lt;/TD&gt;&lt;TD&gt;9.45%&lt;/TD&gt;&lt;TD&gt;50.00%&lt;/TD&gt;&lt;TD&gt;0.0000&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;0.5&lt;/TD&gt;&lt;TD&gt;9.45%&lt;/TD&gt;&lt;TD&gt;50.00%&lt;/TD&gt;&lt;TD&gt;0.0000&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Is there a way to do this in SAS?&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have been trying and searching for a few days, without success.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;If anyone could help, it would be very appreciated.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Kind Regards,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Ricardo&lt;/P&gt;</description>
      <pubDate>Tue, 19 Mar 2019 20:25:02 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Iterative-Excel-Solver-in-SAS-By-changing-variable-cells/m-p/544363#M150547</guid>
      <dc:creator>Baelin10</dc:creator>
      <dc:date>2019-03-19T20:25:02Z</dc:date>
    </item>
    <item>
      <title>Re: Iterative Excel Solver in SAS (By changing variable cells)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Iterative-Excel-Solver-in-SAS-By-changing-variable-cells/m-p/544381#M150552</link>
      <description>&lt;P&gt;Proc FCMP provides a solver that can do this:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc fcmp outlib=work.fcmp.stuff;
function OptVar(AuxVar, Num);
return ( probit(0.975)*sqrt((AuxVar*(1-AuxVar))/Num) + AuxVar );
endsub;
function AuxVar(Num, ratio);
return ( solve("OptVar", {0.1}, ratio, ., Num) );
endsub; 
run;

options cmplib=(work.fcmp);

data have;
input  ID  Num    Ratio;
auxVar = AuxVar(Num, Ratio);
format optVar auxVar percent8.2;
optVar = OptVar(auxVar, Num);
datalines;
1	6	0.166667
2	7	0.285714
3	7	0.285714
4	800	0.375
5	800	0.375
6	744	0.387097
7	2	0.5
;

proc print data=have; run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;PRE&gt;                Obs    ID    Num     Ratio       auxVar      optVar

                 1      1      6    0.16667      3.01%      16.67%
                 2      2      7    0.28571      8.22%      28.57%
                 3      3      7    0.28571      8.22%      28.57%
                 4      4    800    0.37500     34.21%      37.50%
                 5      5    800    0.37500     34.21%      37.50%
                 6      6    744    0.38710     35.28%      38.71%
                 7      7      2    0.50000      9.45%      50.00%
&lt;/PRE&gt;
&lt;P&gt;Nore: If this is a power calculation, you might want to look at the Power proc. &lt;/P&gt;</description>
      <pubDate>Tue, 19 Mar 2019 21:33:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Iterative-Excel-Solver-in-SAS-By-changing-variable-cells/m-p/544381#M150552</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2019-03-19T21:33:00Z</dc:date>
    </item>
    <item>
      <title>Re: Iterative Excel Solver in SAS (By changing variable cells)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Iterative-Excel-Solver-in-SAS-By-changing-variable-cells/m-p/544414#M150562</link>
      <description>&lt;P&gt;You can always try the brute-force approach.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data HAVE;
  retain RATIO 0.166667 NUM 6 ;
run;
data WANT;    
  DELTA=9999;
  set HAVE;
  do I = 0 to 1 by 1e-6;
    VAL = probit(0.975)*sqrt((I*(1-I))/NUM)+I;
    if . &amp;lt; abs(VAL - RATIO) &amp;lt; DELTA then do;   
      DELTA  = abs(VAL - RATIO) ;
      OPTVAR = VAL;
      AUXVAR = I;
    end; 
  end;
  putlog OPTVAR= percent9.2 AUXVAR= percent9.2;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;OPTVAR=16.67% AUXVAR=3.01%&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;[Edit : I didn't see the previous reply.&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/462"&gt;@PGStats&lt;/a&gt;&amp;nbsp;'s solution is smarter. ]&lt;/P&gt;</description>
      <pubDate>Tue, 19 Mar 2019 23:25:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Iterative-Excel-Solver-in-SAS-By-changing-variable-cells/m-p/544414#M150562</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2019-03-19T23:25:43Z</dc:date>
    </item>
    <item>
      <title>Re: Iterative Excel Solver in SAS (By changing variable cells)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Iterative-Excel-Solver-in-SAS-By-changing-variable-cells/m-p/544642#M150639</link>
      <description>&lt;P&gt;Thank you very very much, you solved a big issue here. Worked like a charm!&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Best regards,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Ricardo Soares&lt;/P&gt;</description>
      <pubDate>Wed, 20 Mar 2019 16:59:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Iterative-Excel-Solver-in-SAS-By-changing-variable-cells/m-p/544642#M150639</guid>
      <dc:creator>Baelin10</dc:creator>
      <dc:date>2019-03-20T16:59:47Z</dc:date>
    </item>
  </channel>
</rss>

