<?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: Function prod in SAS in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/745490#M233683</link>
    <description>&lt;P&gt;Sounds like you need to use RETAIN.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have ;
  input VAR1 :$32. TIME  VALUE  VAR_WANT $40.;
cards;
F1        0        .5      v1*v2*v3*v4 = 0.5*0*0.7*1
F1        1        0       v2*v3*v4 = 0*0.7*1
F1        2        .7      v3*v4 = 0.7*1
F1        3        1       v4 = 1
F2        0        1.3     w1*w2*w3 = 1.3*(-0.94)*0.4
F2        1        -.94    w2*w3 = (-0.94)*0.4
F2        2        .4      w3 = .4
;

proc sort data=have;
  by var1 descending time ;
run;

data want ;
  set have ;
  by var1 ;
  retain product ;
  if first.var1 then product=1;
  product=product*value;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Results:&lt;/P&gt;
&lt;PRE&gt;Obs    VAR1    TIME    VALUE    VAR_WANT                      product

 1      F1       3      1.00    v4 = 1                         1.0000
 2      F1       2      0.70    v3*v4 = 0.7*1                  0.7000
 3      F1       1      0.00    v2*v3*v4 = 0*0.7*1             0.0000
 4      F1       0      0.50    v1*v2*v3*v4 = 0.5*0*0.7*1      0.0000
 5      F2       2      0.40    w3 = .4                        0.4000
 6      F2       1     -0.94    w2*w3 = (-0.94)*0.4           -0.3760
 7      F2       0      1.30    w1*w2*w3 = 1.3*(-0.94)*0.4    -0.4888&lt;/PRE&gt;</description>
    <pubDate>Thu, 03 Jun 2021 15:01:19 GMT</pubDate>
    <dc:creator>Tom</dc:creator>
    <dc:date>2021-06-03T15:01:19Z</dc:date>
    <item>
      <title>Function prod in SAS</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/745312#M233595</link>
      <description>&lt;P&gt;Dear all,&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;As SAS don't have a prod() function acting like sum() function, could anyone give an idea about how to achieve this ? I have the variables VAR1, TIME, VALUE and I want to get the variable VAR_WANT.&lt;/P&gt;&lt;P&gt;I know that I could use exp(sum(log())), but I can't because I have null and non positive raw values.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks in advance.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;VAR1    TIME       VALUE        VAR_WANT
F1        0        v1 = .5      v1*v2*v3*v4 = 0.5*0*0.7*1  
F1        1        v2 = 0       v2*v3*v4 = 0*0.7*1
F1        2        v3 = .7      v3*v4 = 0.7*1
F1        3        v4 = 1       v4 = 1
F2        0        w1 = 1.3     w1*w2*w3 = 1.3*(-0.94)*0.4
F2        1        w2 = -.94    w2*w3 = (-0.94)*0.4
F2        2        w3 = .4      w3 = .4&lt;/PRE&gt;</description>
      <pubDate>Wed, 02 Jun 2021 20:28:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/745312#M233595</guid>
      <dc:creator>DoumbiaS</dc:creator>
      <dc:date>2021-06-02T20:28:32Z</dc:date>
    </item>
    <item>
      <title>Re: Function prod in SAS</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/745322#M233598</link>
      <description>&lt;P&gt;So, describe what to do when you do have a "null" (not a SAS concept, do you mean missing?) or non-positive raw values?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Do you have access to Proc IML? This really smells like it want a matrix solution not a data step.&lt;/P&gt;</description>
      <pubDate>Wed, 02 Jun 2021 21:05:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/745322#M233598</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2021-06-02T21:05:42Z</dc:date>
    </item>
    <item>
      <title>Re: Function prod in SAS</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/745329#M233599</link>
      <description>&lt;P&gt;By null I mean 0 values. When I have 0 in a row of VALUE, the resulting VAR_WANT is equal to 0. I could also have missing values indeed.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have access to proc iml even if i prefer alternative ways. Don't hesitate if you want to propose me a proc iml code.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks.&lt;/P&gt;</description>
      <pubDate>Wed, 02 Jun 2021 21:22:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/745329#M233599</guid>
      <dc:creator>DoumbiaS</dc:creator>
      <dc:date>2021-06-02T21:22:26Z</dc:date>
    </item>
    <item>
      <title>Re: Function prod in SAS</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/745333#M233601</link>
      <description>&lt;P&gt;I don't have access to IML but I think if we call &lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/13684"&gt;@Rick_SAS&lt;/a&gt;&amp;nbsp; he may have an idea.&lt;/P&gt;</description>
      <pubDate>Wed, 02 Jun 2021 21:24:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/745333#M233601</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2021-06-02T21:24:39Z</dc:date>
    </item>
    <item>
      <title>Re: Function prod in SAS</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/745343#M233604</link>
      <description>&lt;P&gt;To my knowledge, proc iml don't have a by statement,&amp;nbsp;so it shouldn't be that easy with proc iml, hope not.&lt;/P&gt;</description>
      <pubDate>Wed, 02 Jun 2021 21:56:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/745343#M233604</guid>
      <dc:creator>DoumbiaS</dc:creator>
      <dc:date>2021-06-02T21:56:14Z</dc:date>
    </item>
    <item>
      <title>Re: Function prod in SAS</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/745349#M233607</link>
      <description>&lt;P&gt;&lt;EM&gt;&amp;gt;&amp;nbsp;By null I mean 0 values.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;You mean &lt;EM&gt;nil &lt;/EM&gt;then. &lt;EM&gt;null&lt;/EM&gt; has a very different meaning.&lt;/P&gt;</description>
      <pubDate>Wed, 02 Jun 2021 22:26:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/745349#M233607</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2021-06-02T22:26:13Z</dc:date>
    </item>
    <item>
      <title>Re: Function prod in SAS</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/745352#M233608</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/80356"&gt;@DoumbiaS&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;To my knowledge, proc iml don't have a by statement,&amp;nbsp;so it shouldn't be that easy with proc iml, hope not.&lt;/P&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Since you haven't provided any thing that is actually a data set I wouldn't jump to the conclusion that BY is even an option.&lt;/P&gt;
&lt;P&gt;You appear to be selecting values to play with based on some sort of a diagonal not a group of records that BY would recognize. And that is one of the things that IML can do.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You may need to expound on some rules for identifying which rows make up which block of data. If the data can't tell the program what is needed than things are pretty problematic. There are lots of "problems" with and example of data I can create an output set that matches the "need" but is not likely to be extensible to a larger or more complex example.&lt;/P&gt;</description>
      <pubDate>Wed, 02 Jun 2021 22:36:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/745352#M233608</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2021-06-02T22:36:14Z</dc:date>
    </item>
    <item>
      <title>Re: Function prod in SAS</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/745355#M233611</link>
      <description>&lt;P&gt;Here is one way:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc transpose out=TR;
  by VAR1; var VALUE;
run;
data PROD;
  set TR;
  PROD=coalesce(COL1,1)*coalesce(COL2,1)*coalesce(COL3,1)*coalesce(COL4,1);
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="branch"&gt;
&lt;DIV&gt;
&lt;DIV align="left"&gt;
&lt;TABLE class="table" summary="Procedure Print: Data Set WORK.PROD" frame="box" rules="all" cellspacing="0" cellpadding="5"&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="r header" scope="col"&gt;VAR1&lt;/TH&gt;
&lt;TH class="l header" scope="col"&gt;_NAME_&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;COL1&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;COL2&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;COL3&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;COL4&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;PROD&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="l data"&gt;VALUE&lt;/TD&gt;
&lt;TD class="r data"&gt;0.5&lt;/TD&gt;
&lt;TD class="r data"&gt;0.00&lt;/TD&gt;
&lt;TD class="r data"&gt;0.7&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;0.0000&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;2&lt;/TD&gt;
&lt;TD class="l data"&gt;VALUE&lt;/TD&gt;
&lt;TD class="r data"&gt;1.3&lt;/TD&gt;
&lt;TD class="r data"&gt;-0.94&lt;/TD&gt;
&lt;TD class="r data"&gt;0.4&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;-0.4888&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;</description>
      <pubDate>Wed, 02 Jun 2021 22:44:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/745355#M233611</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2021-06-02T22:44:42Z</dc:date>
    </item>
    <item>
      <title>Re: Function prod in SAS</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/745358#M233614</link>
      <description>&lt;P&gt;The dataset&amp;nbsp;is made up of VAR1, TIME and VALUE. By variables are VAR1 and TIME.&lt;/P&gt;</description>
      <pubDate>Wed, 02 Jun 2021 23:26:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/745358#M233614</guid>
      <dc:creator>DoumbiaS</dc:creator>
      <dc:date>2021-06-02T23:26:59Z</dc:date>
    </item>
    <item>
      <title>Re: Function prod in SAS</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/745361#M233617</link>
      <description>&lt;P&gt;As I have a lot of values of VAR1, proc transpose can be limited. In any case, this is my resulting VAR_WANT column values. I don't know if SAS can make products by going down.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;0
0
0.7
1
-0.4888
-0.376
0.4&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 02 Jun 2021 23:38:58 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/745361#M233617</guid>
      <dc:creator>DoumbiaS</dc:creator>
      <dc:date>2021-06-02T23:38:58Z</dc:date>
    </item>
    <item>
      <title>Re: Function prod in SAS</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/745368#M233622</link>
      <description>&lt;P&gt;Just adapt the code. For example&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data PROD;
  set TR;
  PROD=coalesce(COL1,1)*coalesce(COL2,1)*coalesce(COL3,1)*coalesce(COL4,1); 
  output;
  PROD=                 coalesce(COL2,1)*coalesce(COL3,1)*coalesce(COL4,1); 
  if COL2 ne . then output; 
  PROD=                                  coalesce(COL3,1)*coalesce(COL4,1); 
  if COL3 ne . then output; 
  PROD=                                                   coalesce(COL4,1);  
  if COL4 ne . then output; 
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="branch"&gt;&lt;A name="IDX" target="_blank"&gt;&lt;/A&gt;
&lt;DIV&gt;
&lt;DIV align="left"&gt;
&lt;TABLE class="table" summary="Procedure Print: Data Set WORK.PROD" frame="box" rules="all" cellspacing="0" cellpadding="5"&gt;&lt;COLGROUP&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt;&lt;/COLGROUP&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="l header" scope="col"&gt;VAR1&lt;/TH&gt;
&lt;TH class="l header" scope="col"&gt;_NAME_&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;COL1&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;COL2&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;COL3&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;COL4&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;PROD&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;F1&lt;/TD&gt;
&lt;TD class="l data"&gt;VALUE&lt;/TD&gt;
&lt;TD class="r data"&gt;0.5&lt;/TD&gt;
&lt;TD class="r data"&gt;0.00&lt;/TD&gt;
&lt;TD class="r data"&gt;0.7&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;0.0000&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;F1&lt;/TD&gt;
&lt;TD class="l data"&gt;VALUE&lt;/TD&gt;
&lt;TD class="r data"&gt;0.5&lt;/TD&gt;
&lt;TD class="r data"&gt;0.00&lt;/TD&gt;
&lt;TD class="r data"&gt;0.7&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;0.0000&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;F1&lt;/TD&gt;
&lt;TD class="l data"&gt;VALUE&lt;/TD&gt;
&lt;TD class="r data"&gt;0.5&lt;/TD&gt;
&lt;TD class="r data"&gt;0.00&lt;/TD&gt;
&lt;TD class="r data"&gt;0.7&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;0.7000&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;F1&lt;/TD&gt;
&lt;TD class="l data"&gt;VALUE&lt;/TD&gt;
&lt;TD class="r data"&gt;0.5&lt;/TD&gt;
&lt;TD class="r data"&gt;0.00&lt;/TD&gt;
&lt;TD class="r data"&gt;0.7&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;1.0000&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;F2&lt;/TD&gt;
&lt;TD class="l data"&gt;VALUE&lt;/TD&gt;
&lt;TD class="r data"&gt;1.3&lt;/TD&gt;
&lt;TD class="r data"&gt;-0.94&lt;/TD&gt;
&lt;TD class="r data"&gt;0.4&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;-0.4888&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;F2&lt;/TD&gt;
&lt;TD class="l data"&gt;VALUE&lt;/TD&gt;
&lt;TD class="r data"&gt;1.3&lt;/TD&gt;
&lt;TD class="r data"&gt;-0.94&lt;/TD&gt;
&lt;TD class="r data"&gt;0.4&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;-0.3760&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;F2&lt;/TD&gt;
&lt;TD class="l data"&gt;VALUE&lt;/TD&gt;
&lt;TD class="r data"&gt;1.3&lt;/TD&gt;
&lt;TD class="r data"&gt;-0.94&lt;/TD&gt;
&lt;TD class="r data"&gt;0.4&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;0.4000&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;Another way if transposing presents issues could be by reading observations ahead. For example&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data WANT ;
  merge HAVE         
        HAVE(firstobs=2 rename=(VAR1=VAR2 VALUE=V2))
        HAVE(firstobs=3 rename=(VAR1=VAR3 VALUE=V3))
        HAVE(firstobs=4 rename=(VAR1=VAR4 VALUE=V4));
  V2=ifn(VAR1=VAR2,V2,.);
  V3=ifn(VAR1=VAR3,V3,.);
  V4=ifn(VAR1=VAR4,V4,.);
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 03 Jun 2021 00:34:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/745368#M233622</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2021-06-03T00:34:22Z</dc:date>
    </item>
    <item>
      <title>Re: Function prod in SAS</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/745369#M233623</link>
      <description>&lt;P&gt;Or slightly more efficient:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data PROD;
  set TR;
  PROD=coalesce(COL1,1)*coalesce(COL2,1)*coalesce(COL3,1)*coalesce(COL4,1); output;
  if COL2=. then return;
  PROD=                 coalesce(COL2,1)*coalesce(COL3,1)*coalesce(COL4,1); output; 
  if COL3=. then return;
  PROD=                                  coalesce(COL3,1)*coalesce(COL4,1); output; 
  if COL4=. then return;
  PROD=                                                   coalesce(COL4,1); output; 
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 03 Jun 2021 00:38:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/745369#M233623</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2021-06-03T00:38:08Z</dc:date>
    </item>
    <item>
      <title>Re: Function prod in SAS</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/745452#M233657</link>
      <description>Yes. That function cuprod() is under SAS/IML . &lt;BR /&gt;Why not write DATA STEP code to get it ?</description>
      <pubDate>Thu, 03 Jun 2021 12:53:28 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/745452#M233657</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2021-06-03T12:53:28Z</dc:date>
    </item>
    <item>
      <title>Re: Function prod in SAS</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/745488#M233681</link>
      <description>&lt;P&gt;It's not clear whether you have wide data or long data. For wide data, you can &lt;A href="https://blogs.sas.com/content/iml/2021/05/19/implement-product-function-sas.html" target="_self"&gt;use PROC FCMP to define a product function that you can call from the DATA step.&lt;/A&gt;&amp;nbsp;The same article mentions how to compute products for long data.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As others have mentioned, you can also do this in SAS/IML.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you provide a DATA step with sample data, we can give more advice.&lt;/P&gt;</description>
      <pubDate>Thu, 03 Jun 2021 14:50:41 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/745488#M233681</guid>
      <dc:creator>Rick_SAS</dc:creator>
      <dc:date>2021-06-03T14:50:41Z</dc:date>
    </item>
    <item>
      <title>Re: Function prod in SAS</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/745490#M233683</link>
      <description>&lt;P&gt;Sounds like you need to use RETAIN.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have ;
  input VAR1 :$32. TIME  VALUE  VAR_WANT $40.;
cards;
F1        0        .5      v1*v2*v3*v4 = 0.5*0*0.7*1
F1        1        0       v2*v3*v4 = 0*0.7*1
F1        2        .7      v3*v4 = 0.7*1
F1        3        1       v4 = 1
F2        0        1.3     w1*w2*w3 = 1.3*(-0.94)*0.4
F2        1        -.94    w2*w3 = (-0.94)*0.4
F2        2        .4      w3 = .4
;

proc sort data=have;
  by var1 descending time ;
run;

data want ;
  set have ;
  by var1 ;
  retain product ;
  if first.var1 then product=1;
  product=product*value;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Results:&lt;/P&gt;
&lt;PRE&gt;Obs    VAR1    TIME    VALUE    VAR_WANT                      product

 1      F1       3      1.00    v4 = 1                         1.0000
 2      F1       2      0.70    v3*v4 = 0.7*1                  0.7000
 3      F1       1      0.00    v2*v3*v4 = 0*0.7*1             0.0000
 4      F1       0      0.50    v1*v2*v3*v4 = 0.5*0*0.7*1      0.0000
 5      F2       2      0.40    w3 = .4                        0.4000
 6      F2       1     -0.94    w2*w3 = (-0.94)*0.4           -0.3760
 7      F2       0      1.30    w1*w2*w3 = 1.3*(-0.94)*0.4    -0.4888&lt;/PRE&gt;</description>
      <pubDate>Thu, 03 Jun 2021 15:01:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/745490#M233683</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2021-06-03T15:01:19Z</dc:date>
    </item>
    <item>
      <title>Re: Function prod in SAS</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/746153#M234038</link>
      <description>&lt;P&gt;Yes absolutly, I did something like this too.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks to all.&lt;/P&gt;</description>
      <pubDate>Mon, 07 Jun 2021 07:04:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Function-prod-in-SAS/m-p/746153#M234038</guid>
      <dc:creator>DoumbiaS</dc:creator>
      <dc:date>2021-06-07T07:04:29Z</dc:date>
    </item>
  </channel>
</rss>

