<?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: replace max value with different number in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/replace-max-value-with-different-number/m-p/797049#M255820</link>
    <description>&lt;P&gt;If you have SAS/IML 15.1 or higher licensed, you could do it this way in PROC IML:&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input item $ dmd1-dmd12;
datalines;
mat1 18 0 27 0 17 2 3 10 3 1 0 40008 
mat2 1 0 5 10 9 0 8 1008 5 0 0 7 
;

proc iml;
 use have; /* read data set into IML */
  read all var _NUM_ into X[colname=dmd];
  read all var _CHAR_ into item[colname=char];
 close have;
 
 /* locate maximum value in each row and permanently replace it with desired logic */
 X[loc(X=X[,&amp;lt;&amp;gt;])] = int((X[,+] - X[,&amp;lt;&amp;gt;]) / 11); *print X[c=dmd r=item];

 /* create output data set */
 colNames = char || dmd; 
 create want from item X [colname=colNames];  
  append from item X; 
 close;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Thu, 17 Feb 2022 20:07:19 GMT</pubDate>
    <dc:creator>ChanceTGardener</dc:creator>
    <dc:date>2022-02-17T20:07:19Z</dc:date>
    <item>
      <title>replace max value with different number</title>
      <link>https://communities.sas.com/t5/SAS-Programming/replace-max-value-with-different-number/m-p/796967#M255804</link>
      <description>&lt;P&gt;Hello,&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have 12 months observations and I do need to replace maximum value with other value.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="dht115_0-1645123827759.png" style="width: 400px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/68607iDFFA1F4363D34D3A/image-size/medium?v=v2&amp;amp;px=400" role="button" title="dht115_0-1645123827759.png" alt="dht115_0-1645123827759.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;Example:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Mat-1:&lt;/P&gt;&lt;P&gt;I do need to replace dmd12 value as follow.&amp;nbsp;&lt;/P&gt;&lt;P&gt;I do need to identify maximum value to identify dmd12 has maximum value.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;18&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;27&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;17&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;40008&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Sum is&amp;nbsp; 40089&lt;/P&gt;&lt;P&gt;subtract with maximum number: 40089 - 40008 = 81&lt;/P&gt;&lt;P&gt;divide by 11: 81/11 = 7.3636&lt;/P&gt;&lt;P&gt;int: int(7.3636) = 7&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Replace 40008 to 7&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Mat-2:&lt;/P&gt;&lt;P&gt;I do need to replace dmd8 value as follow.&amp;nbsp;&lt;/P&gt;&lt;P&gt;I do need to identify maximum value to identify dmd8 has maximum value.&amp;nbsp;&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;0&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;1008&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;Sum is&amp;nbsp; 1053&lt;/P&gt;&lt;P&gt;subtract with maximum number: 1053 - 1008 = 45&lt;/P&gt;&lt;P&gt;divide by 11: 45/11 = 4.0909&lt;/P&gt;&lt;P&gt;int: int(4.0909) = 4&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Replace 1008 to 4&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=""&gt;data have;
input item $ dmd1-dmd12;
datalines;
mat1 18 0 27 0 17 2 3 10 3 1 0 40008 
mat2 1 0 5 10 9 0 8 1008 5 0 0 7 
;
run;

/*need to replace maximum dmd value with following logic*/
/*replace_value = int((sum(of DemandMon1-DemandMon12)-maximum dmd)/11);*/&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 17 Feb 2022 18:59:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/replace-max-value-with-different-number/m-p/796967#M255804</guid>
      <dc:creator>dht115</dc:creator>
      <dc:date>2022-02-17T18:59:29Z</dc:date>
    </item>
    <item>
      <title>Re: replace max value with different number</title>
      <link>https://communities.sas.com/t5/SAS-Programming/replace-max-value-with-different-number/m-p/797026#M255812</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/324991"&gt;@dht115&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I wonder if this is a real-life problem, but it is definitely a good case for playing with arrays in SAS. The following code should do the trick:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
	input item$ dmd1-dmd12;
cards;
mat1 18 0 27 0 17 2 3 10 3 1 0 40008
mat2 1 0 5 10 9 0 8 1008 5 0 0 7
;
run;

data want (drop=maxval maxpos);
	set have;
	array d dmd1-dmd12;
	maxval = max(of d{*});
	maxpos = whichn(maxval, of d{*});
	d{maxpos} = int((sum(of d{*}) - maxval) / 11);
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 17 Feb 2022 19:29:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/replace-max-value-with-different-number/m-p/797026#M255812</guid>
      <dc:creator>ErikLund_Jensen</dc:creator>
      <dc:date>2022-02-17T19:29:59Z</dc:date>
    </item>
    <item>
      <title>Re: replace max value with different number</title>
      <link>https://communities.sas.com/t5/SAS-Programming/replace-max-value-with-different-number/m-p/797049#M255820</link>
      <description>&lt;P&gt;If you have SAS/IML 15.1 or higher licensed, you could do it this way in PROC IML:&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input item $ dmd1-dmd12;
datalines;
mat1 18 0 27 0 17 2 3 10 3 1 0 40008 
mat2 1 0 5 10 9 0 8 1008 5 0 0 7 
;

proc iml;
 use have; /* read data set into IML */
  read all var _NUM_ into X[colname=dmd];
  read all var _CHAR_ into item[colname=char];
 close have;
 
 /* locate maximum value in each row and permanently replace it with desired logic */
 X[loc(X=X[,&amp;lt;&amp;gt;])] = int((X[,+] - X[,&amp;lt;&amp;gt;]) / 11); *print X[c=dmd r=item];

 /* create output data set */
 colNames = char || dmd; 
 create want from item X [colname=colNames];  
  append from item X; 
 close;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 17 Feb 2022 20:07:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/replace-max-value-with-different-number/m-p/797049#M255820</guid>
      <dc:creator>ChanceTGardener</dc:creator>
      <dc:date>2022-02-17T20:07:19Z</dc:date>
    </item>
  </channel>
</rss>

