<?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: Condition statement in MACRO in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Condition-statement-in-MACRO/m-p/825188#M325931</link>
    <description>&lt;P&gt;I don't open any attachments, please post data in usable form: a data step using datalines.&lt;/P&gt;
&lt;P&gt;As always: starting with code that uses NO macro variables and NO macro statements is recommended.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Mon, 25 Jul 2022 08:33:14 GMT</pubDate>
    <dc:creator>andreas_lds</dc:creator>
    <dc:date>2022-07-25T08:33:14Z</dc:date>
    <item>
      <title>Condition statement in MACRO</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Condition-statement-in-MACRO/m-p/825182#M325928</link>
      <description>&lt;P&gt;Hi, I am stuck with the following issue.&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have the following dataset and I want to do a calculation (numerator/denominator).&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here is the SAS code I used.&amp;nbsp;&lt;/P&gt;&lt;P&gt;data test1;&lt;BR /&gt;set test;&lt;/P&gt;&lt;P&gt;%macro merge_po(der_var = );&lt;/P&gt;&lt;P&gt;&amp;amp;der_var._wtd =round(sum(&amp;amp;der_var._1W*LOS_1W,&amp;amp;der_var._2W*LOS_2W,&amp;amp;der_var._3W*LOS_3W, &amp;amp;der_var._4W*LOS_4W)/ sum(los_1W, los_2W, los_3W, los_4W),.1);&lt;BR /&gt;&lt;BR /&gt;%mend merge_po;&lt;/P&gt;&lt;P&gt;%merge_po(der_var = NP);&lt;BR /&gt;%merge_po(der_var = CR);&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;My question:&amp;nbsp;&lt;/P&gt;&lt;P&gt;I want to use a conditional statement for the denominator. for example, if the CR_W3 =. then omit the LOS_3W in the sum stated in the denominator. or if NP_3W=. then omit LOS_3W in the sum indicated in the denominator.&lt;/P&gt;&lt;P&gt;when I run the above code, SAS will include all LOS_1 to LOS_4.&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;LOS_1W&lt;/TD&gt;&lt;TD&gt;LOS_2W&lt;/TD&gt;&lt;TD&gt;LOS_3W&lt;/TD&gt;&lt;TD&gt;LOS_4W&lt;/TD&gt;&lt;TD&gt;NP_1W&lt;/TD&gt;&lt;TD&gt;NP_2W&lt;/TD&gt;&lt;TD&gt;NP_3W&lt;/TD&gt;&lt;TD&gt;NP_4W&lt;/TD&gt;&lt;TD&gt;CR_1W&lt;/TD&gt;&lt;TD&gt;CR_2W&lt;/TD&gt;&lt;TD&gt;CR_3W&lt;/TD&gt;&lt;TD&gt;CR_4W&lt;/TD&gt;&lt;TD&gt;Ratio_1W&lt;/TD&gt;&lt;TD&gt;Ratio_2W&lt;/TD&gt;&lt;TD&gt;Ratio_3W&lt;/TD&gt;&lt;TD&gt;Ratio_4W&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;3.4&lt;/TD&gt;&lt;TD&gt;2.9&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;2.9&lt;/TD&gt;&lt;TD&gt;86.5&lt;/TD&gt;&lt;TD&gt;75.5&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;81.8&lt;/TD&gt;&lt;TD&gt;4.2&lt;/TD&gt;&lt;TD&gt;4.1&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;1.1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;3.4&lt;/TD&gt;&lt;TD&gt;2.9&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;2.9&lt;/TD&gt;&lt;TD&gt;86.5&lt;/TD&gt;&lt;TD&gt;75.5&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;81.8&lt;/TD&gt;&lt;TD&gt;4.2&lt;/TD&gt;&lt;TD&gt;4.1&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;1.1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;3.4&lt;/TD&gt;&lt;TD&gt;2.9&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;2.9&lt;/TD&gt;&lt;TD&gt;86.5&lt;/TD&gt;&lt;TD&gt;75.5&lt;/TD&gt;&lt;TD&gt;76.3&lt;/TD&gt;&lt;TD&gt;81.8&lt;/TD&gt;&lt;TD&gt;4.2&lt;/TD&gt;&lt;TD&gt;4.1&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;1.1&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&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;3.4&lt;/TD&gt;&lt;TD&gt;2.9&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;2.9&lt;/TD&gt;&lt;TD&gt;86.5&lt;/TD&gt;&lt;TD&gt;75.5&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;81.8&lt;/TD&gt;&lt;TD&gt;4.2&lt;/TD&gt;&lt;TD&gt;4.1&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;1.1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The outcome I wish is :&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;NP_wtd&lt;/TD&gt;&lt;TD&gt;CR_wtd&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3.08&lt;/TD&gt;&lt;TD&gt;75.5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3.4&lt;/TD&gt;&lt;TD&gt;86.5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2.92&lt;/TD&gt;&lt;TD&gt;75.7&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3.01&lt;/TD&gt;&lt;TD&gt;77.96&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&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;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 25 Jul 2022 04:56:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Condition-statement-in-MACRO/m-p/825182#M325928</guid>
      <dc:creator>Tamertmg</dc:creator>
      <dc:date>2022-07-25T04:56:30Z</dc:date>
    </item>
    <item>
      <title>Re: Condition statement in MACRO</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Condition-statement-in-MACRO/m-p/825188#M325931</link>
      <description>&lt;P&gt;I don't open any attachments, please post data in usable form: a data step using datalines.&lt;/P&gt;
&lt;P&gt;As always: starting with code that uses NO macro variables and NO macro statements is recommended.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 25 Jul 2022 08:33:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Condition-statement-in-MACRO/m-p/825188#M325931</guid>
      <dc:creator>andreas_lds</dc:creator>
      <dc:date>2022-07-25T08:33:14Z</dc:date>
    </item>
    <item>
      <title>Re: Condition statement in MACRO</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Condition-statement-in-MACRO/m-p/825194#M325934</link>
      <description>&lt;P&gt;The code is hardly tested:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want(keep= np_wtd cr_wtd);
   set have;
   length sum deno np_wtd cr_wtd 8;
   
   array values[2, 4] NP_1W NP_2W NP_3W NP_4W CR_1W CR_2W CR_3W CR_4W;
   array los[4] LOS_1W LOS_2W LOS_3W LOS_4W;
   array results[2] np_wtd cr_wtd;
   
   do j = 1 to 2;
      sum = 0;
      deno = 0;
      
      do i = 1 to 4;
         sum = sum(sum, values[j, i] * los[i]);
         
         if not missing(values[j, i]) then do;
            deno = sum(deno, los[i]);
         end;
      end;
   
      results[j] = round(sum / deno, 0.01);
   end;   
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 25 Jul 2022 09:08:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Condition-statement-in-MACRO/m-p/825194#M325934</guid>
      <dc:creator>andreas_lds</dc:creator>
      <dc:date>2022-07-25T09:08:14Z</dc:date>
    </item>
    <item>
      <title>Re: Condition statement in MACRO</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Condition-statement-in-MACRO/m-p/825208#M325941</link>
      <description>Hi Andrees,&lt;BR /&gt;Thank you for your reply.&lt;BR /&gt;The code is working for a limited number of variables.&lt;BR /&gt;I have around 78 variables that want the same procedure or calculation. Is there any way to combine the code you wrote with the MACRO statement as this will help me to run the code for 78 variables?</description>
      <pubDate>Mon, 25 Jul 2022 10:26:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Condition-statement-in-MACRO/m-p/825208#M325941</guid>
      <dc:creator>Tamertmg</dc:creator>
      <dc:date>2022-07-25T10:26:36Z</dc:date>
    </item>
    <item>
      <title>Re: Condition statement in MACRO</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Condition-statement-in-MACRO/m-p/825212#M325945</link>
      <description>&lt;P&gt;So, you have 78 * 4 variables?&lt;/P&gt;
&lt;P&gt;You could extend the array definitions:&lt;/P&gt;
&lt;P&gt;In&lt;/P&gt;
&lt;LI-CODE lang="sas"&gt;array values[2, 4] NP_1W NP_2W NP_3W NP_4W CR_1W CR_2W CR_3W CR_4W;&lt;/LI-CODE&gt;
&lt;P&gt;the 2 is the number of variable-groups that are processed, for each group increase the first dimension, than add the variables.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Same here, increase the dimension, add a variable to hold the result.&lt;/P&gt;
&lt;LI-CODE lang="sas"&gt;array results[2] np_wtd cr_wtd;&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;And finally a small update to the outer loop;&lt;/P&gt;
&lt;LI-CODE lang="sas"&gt;do j = 1 to 2;&lt;/LI-CODE&gt;
&lt;P&gt;change it to&lt;/P&gt;
&lt;LI-CODE lang="sas"&gt;do j = 1 to dim(results);&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 25 Jul 2022 12:04:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Condition-statement-in-MACRO/m-p/825212#M325945</guid>
      <dc:creator>andreas_lds</dc:creator>
      <dc:date>2022-07-25T12:04:09Z</dc:date>
    </item>
    <item>
      <title>Re: Condition statement in MACRO</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Condition-statement-in-MACRO/m-p/825216#M325946</link>
      <description>&lt;P&gt;If you don't like the 2-dim-array, try this:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro merge_po(var=);
   array &amp;amp;var. &amp;amp;var._1w &amp;amp;var._2w &amp;amp;var._3w &amp;amp;var._4w;
   sum = 0; 
   deno = 0;
   
   do i = 1 to dim(&amp;amp;var.);
      sum = sum(sum, &amp;amp;var[i] * los[i]);
      
      if not missing(&amp;amp;var[i]) then do;
         deno = sum(deno, los[i]);
      end;
   end;
   
   &amp;amp;var._wtd = round(sum / deno, 0.01);
   
   drop &amp;amp;var._1w &amp;amp;var._2w &amp;amp;var._3w &amp;amp;var._4w;
%mend;

data work.want_macro;
   set have;
   
   array los[4] LOS_1W LOS_2W LOS_3W LOS_4W;
   
   %merge_po(var=np);
   %merge_po(var=cr);
   %merge_po(var=ratio);   
      
   drop i sum deno los:;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 25 Jul 2022 12:16:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Condition-statement-in-MACRO/m-p/825216#M325946</guid>
      <dc:creator>andreas_lds</dc:creator>
      <dc:date>2022-07-25T12:16:43Z</dc:date>
    </item>
    <item>
      <title>Re: Condition statement in MACRO</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Condition-statement-in-MACRO/m-p/825674#M326122</link>
      <description>Thank you so much for your help.&lt;BR /&gt;It is working</description>
      <pubDate>Wed, 27 Jul 2022 13:42:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Condition-statement-in-MACRO/m-p/825674#M326122</guid>
      <dc:creator>Tamertmg</dc:creator>
      <dc:date>2022-07-27T13:42:33Z</dc:date>
    </item>
  </channel>
</rss>

