<?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: retain and recursive calculate value by group in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/retain-and-recursive-calculate-value-by-group/m-p/670526#M201309</link>
    <description>&lt;P&gt;thanks for your help ,&lt;/P&gt;&lt;P&gt;the proposed code give me the following result&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;age&lt;/TD&gt;&lt;TD&gt;country&lt;/TD&gt;&lt;TD&gt;region&lt;/TD&gt;&lt;TD&gt;x&lt;/TD&gt;&lt;TD&gt;want&lt;/TD&gt;&lt;TD&gt;y&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;FR&lt;/TD&gt;&lt;TD&gt;Europe&lt;/TD&gt;&lt;TD&gt;0,5&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;FR&lt;/TD&gt;&lt;TD&gt;Europe&lt;/TD&gt;&lt;TD&gt;0,6&lt;/TD&gt;&lt;TD&gt;0,5&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;FR&lt;/TD&gt;&lt;TD&gt;Europe&lt;/TD&gt;&lt;TD&gt;0,7&lt;/TD&gt;&lt;TD&gt;0,2&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;FR&lt;/TD&gt;&lt;TD&gt;Europe&lt;/TD&gt;&lt;TD&gt;0,8&lt;/TD&gt;&lt;TD&gt;0,06&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;FR&lt;/TD&gt;&lt;TD&gt;Europe&lt;/TD&gt;&lt;TD&gt;0,9&lt;/TD&gt;&lt;TD&gt;0,012&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;America&lt;/TD&gt;&lt;TD&gt;0,1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;America&lt;/TD&gt;&lt;TD&gt;0,2&lt;/TD&gt;&lt;TD&gt;0,9&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;America&lt;/TD&gt;&lt;TD&gt;0,3&lt;/TD&gt;&lt;TD&gt;0,72&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;America&lt;/TD&gt;&lt;TD&gt;0,4&lt;/TD&gt;&lt;TD&gt;0,504&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;America&lt;/TD&gt;&lt;TD&gt;0,5&lt;/TD&gt;&lt;TD&gt;0,3024&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
set have;
by  country region age;
y=lag(y)*(1-lag(x));
if first.country then y=1;
run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;when i tried retain as below i've got wrong result comparing to column want&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;age&lt;/TD&gt;&lt;TD&gt;country&lt;/TD&gt;&lt;TD&gt;region&lt;/TD&gt;&lt;TD&gt;x&lt;/TD&gt;&lt;TD&gt;want&lt;/TD&gt;&lt;TD&gt;y&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;FR&lt;/TD&gt;&lt;TD&gt;Europe&lt;/TD&gt;&lt;TD&gt;0,5&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;FR&lt;/TD&gt;&lt;TD&gt;Europe&lt;/TD&gt;&lt;TD&gt;0,6&lt;/TD&gt;&lt;TD&gt;0,5&lt;/TD&gt;&lt;TD&gt;0,5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;FR&lt;/TD&gt;&lt;TD&gt;Europe&lt;/TD&gt;&lt;TD&gt;0,7&lt;/TD&gt;&lt;TD&gt;0,2&lt;/TD&gt;&lt;TD&gt;0,4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;FR&lt;/TD&gt;&lt;TD&gt;Europe&lt;/TD&gt;&lt;TD&gt;0,8&lt;/TD&gt;&lt;TD&gt;0,06&lt;/TD&gt;&lt;TD&gt;0,15&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;FR&lt;/TD&gt;&lt;TD&gt;Europe&lt;/TD&gt;&lt;TD&gt;0,9&lt;/TD&gt;&lt;TD&gt;0,012&lt;/TD&gt;&lt;TD&gt;0,08&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;America&lt;/TD&gt;&lt;TD&gt;0,1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;America&lt;/TD&gt;&lt;TD&gt;0,2&lt;/TD&gt;&lt;TD&gt;0,9&lt;/TD&gt;&lt;TD&gt;0,072&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;America&lt;/TD&gt;&lt;TD&gt;0,3&lt;/TD&gt;&lt;TD&gt;0,72&lt;/TD&gt;&lt;TD&gt;0,8&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;America&lt;/TD&gt;&lt;TD&gt;0,4&lt;/TD&gt;&lt;TD&gt;0,504&lt;/TD&gt;&lt;TD&gt;0,0504&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;America&lt;/TD&gt;&lt;TD&gt;0,5&lt;/TD&gt;&lt;TD&gt;0,3024&lt;/TD&gt;&lt;TD&gt;0,48&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
set have;
by  country region age;
retain y 1;
y=lag(y)*(1-lag(x));
if first.country then y=1;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Sun, 19 Jul 2020 22:10:06 GMT</pubDate>
    <dc:creator>bebess</dc:creator>
    <dc:date>2020-07-19T22:10:06Z</dc:date>
    <item>
      <title>retain and recursive calculate value by group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/retain-and-recursive-calculate-value-by-group/m-p/670522#M201306</link>
      <description>&lt;P&gt;Dear users,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;i would like to replicate the result ( column want ) of my Excel example below .&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;any help on it i tried many ways , maybe the code below is close to get the right results.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV class="mceNonEditable lia-copypaste-placeholder"&gt;&amp;nbsp;&lt;/DIV&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;age&lt;/TD&gt;&lt;TD&gt;country&lt;/TD&gt;&lt;TD&gt;region&lt;/TD&gt;&lt;TD&gt;x&lt;/TD&gt;&lt;TD&gt;want&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;FR&lt;/TD&gt;&lt;TD&gt;Europe&lt;/TD&gt;&lt;TD&gt;0,5&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;FR&lt;/TD&gt;&lt;TD&gt;Europe&lt;/TD&gt;&lt;TD&gt;0,6&lt;/TD&gt;&lt;TD&gt;0,5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;FR&lt;/TD&gt;&lt;TD&gt;Europe&lt;/TD&gt;&lt;TD&gt;0,7&lt;/TD&gt;&lt;TD&gt;0,2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;FR&lt;/TD&gt;&lt;TD&gt;Europe&lt;/TD&gt;&lt;TD&gt;0,8&lt;/TD&gt;&lt;TD&gt;0,06&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;FR&lt;/TD&gt;&lt;TD&gt;Europe&lt;/TD&gt;&lt;TD&gt;0,9&lt;/TD&gt;&lt;TD&gt;0,012&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;America&lt;/TD&gt;&lt;TD&gt;0,1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;America&lt;/TD&gt;&lt;TD&gt;0,2&lt;/TD&gt;&lt;TD&gt;0,9&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;America&lt;/TD&gt;&lt;TD&gt;0,3&lt;/TD&gt;&lt;TD&gt;0,72&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;America&lt;/TD&gt;&lt;TD&gt;0,4&lt;/TD&gt;&lt;TD&gt;0,504&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;America&lt;/TD&gt;&lt;TD&gt;0,5&lt;/TD&gt;&lt;TD&gt;0,3024&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;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
set have;
by  country region age;
if first.country then y=1;
else y=lag(y)*(1-lag(x));
run;

&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV class="mceNonEditable lia-copypaste-placeholder"&gt;&amp;nbsp;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sun, 19 Jul 2020 21:29:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/retain-and-recursive-calculate-value-by-group/m-p/670522#M201306</guid>
      <dc:creator>bebess</dc:creator>
      <dc:date>2020-07-19T21:29:26Z</dc:date>
    </item>
    <item>
      <title>Re: retain and recursive calculate value by group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/retain-and-recursive-calculate-value-by-group/m-p/670524#M201307</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/55544"&gt;@bebess&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;...&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
set have;
by  country region age;
if first.country then y=1;
else y=lag(y)*(1-lag(x));
run;

&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;That is not going to work right.&amp;nbsp; By not calling the LAG() function for the first value of each COUNTRY the values of X and Y from that observation never make it into the list of values it has available to return.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Do this instead so that LAG() runs on every observation.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;y=lag(y)*(1-lag(x));
if first.country then y=1;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sun, 19 Jul 2020 21:47:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/retain-and-recursive-calculate-value-by-group/m-p/670524#M201307</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2020-07-19T21:47:10Z</dc:date>
    </item>
    <item>
      <title>Re: retain and recursive calculate value by group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/retain-and-recursive-calculate-value-by-group/m-p/670526#M201309</link>
      <description>&lt;P&gt;thanks for your help ,&lt;/P&gt;&lt;P&gt;the proposed code give me the following result&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;age&lt;/TD&gt;&lt;TD&gt;country&lt;/TD&gt;&lt;TD&gt;region&lt;/TD&gt;&lt;TD&gt;x&lt;/TD&gt;&lt;TD&gt;want&lt;/TD&gt;&lt;TD&gt;y&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;FR&lt;/TD&gt;&lt;TD&gt;Europe&lt;/TD&gt;&lt;TD&gt;0,5&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;FR&lt;/TD&gt;&lt;TD&gt;Europe&lt;/TD&gt;&lt;TD&gt;0,6&lt;/TD&gt;&lt;TD&gt;0,5&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;FR&lt;/TD&gt;&lt;TD&gt;Europe&lt;/TD&gt;&lt;TD&gt;0,7&lt;/TD&gt;&lt;TD&gt;0,2&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;FR&lt;/TD&gt;&lt;TD&gt;Europe&lt;/TD&gt;&lt;TD&gt;0,8&lt;/TD&gt;&lt;TD&gt;0,06&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;FR&lt;/TD&gt;&lt;TD&gt;Europe&lt;/TD&gt;&lt;TD&gt;0,9&lt;/TD&gt;&lt;TD&gt;0,012&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;America&lt;/TD&gt;&lt;TD&gt;0,1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;America&lt;/TD&gt;&lt;TD&gt;0,2&lt;/TD&gt;&lt;TD&gt;0,9&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;America&lt;/TD&gt;&lt;TD&gt;0,3&lt;/TD&gt;&lt;TD&gt;0,72&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;America&lt;/TD&gt;&lt;TD&gt;0,4&lt;/TD&gt;&lt;TD&gt;0,504&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;America&lt;/TD&gt;&lt;TD&gt;0,5&lt;/TD&gt;&lt;TD&gt;0,3024&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
set have;
by  country region age;
y=lag(y)*(1-lag(x));
if first.country then y=1;
run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;when i tried retain as below i've got wrong result comparing to column want&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;age&lt;/TD&gt;&lt;TD&gt;country&lt;/TD&gt;&lt;TD&gt;region&lt;/TD&gt;&lt;TD&gt;x&lt;/TD&gt;&lt;TD&gt;want&lt;/TD&gt;&lt;TD&gt;y&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;FR&lt;/TD&gt;&lt;TD&gt;Europe&lt;/TD&gt;&lt;TD&gt;0,5&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;FR&lt;/TD&gt;&lt;TD&gt;Europe&lt;/TD&gt;&lt;TD&gt;0,6&lt;/TD&gt;&lt;TD&gt;0,5&lt;/TD&gt;&lt;TD&gt;0,5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;FR&lt;/TD&gt;&lt;TD&gt;Europe&lt;/TD&gt;&lt;TD&gt;0,7&lt;/TD&gt;&lt;TD&gt;0,2&lt;/TD&gt;&lt;TD&gt;0,4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;FR&lt;/TD&gt;&lt;TD&gt;Europe&lt;/TD&gt;&lt;TD&gt;0,8&lt;/TD&gt;&lt;TD&gt;0,06&lt;/TD&gt;&lt;TD&gt;0,15&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;FR&lt;/TD&gt;&lt;TD&gt;Europe&lt;/TD&gt;&lt;TD&gt;0,9&lt;/TD&gt;&lt;TD&gt;0,012&lt;/TD&gt;&lt;TD&gt;0,08&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;America&lt;/TD&gt;&lt;TD&gt;0,1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;America&lt;/TD&gt;&lt;TD&gt;0,2&lt;/TD&gt;&lt;TD&gt;0,9&lt;/TD&gt;&lt;TD&gt;0,072&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;America&lt;/TD&gt;&lt;TD&gt;0,3&lt;/TD&gt;&lt;TD&gt;0,72&lt;/TD&gt;&lt;TD&gt;0,8&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;America&lt;/TD&gt;&lt;TD&gt;0,4&lt;/TD&gt;&lt;TD&gt;0,504&lt;/TD&gt;&lt;TD&gt;0,0504&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;US&lt;/TD&gt;&lt;TD&gt;America&lt;/TD&gt;&lt;TD&gt;0,5&lt;/TD&gt;&lt;TD&gt;0,3024&lt;/TD&gt;&lt;TD&gt;0,48&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
set have;
by  country region age;
retain y 1;
y=lag(y)*(1-lag(x));
if first.country then y=1;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sun, 19 Jul 2020 22:10:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/retain-and-recursive-calculate-value-by-group/m-p/670526#M201309</guid>
      <dc:creator>bebess</dc:creator>
      <dc:date>2020-07-19T22:10:06Z</dc:date>
    </item>
    <item>
      <title>Re: retain and recursive calculate value by group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/retain-and-recursive-calculate-value-by-group/m-p/670531#M201310</link>
      <description>&lt;P&gt;Why are you calling LAG(Y)?&amp;nbsp; That neither makes any sense if Y is not one of your source variables nor if you want to use the retained value in the calculation.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
  set have;
  by country region age;
  y=y*(1-lag(x));
  if first.country then y=1;
  retain y;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sun, 19 Jul 2020 23:09:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/retain-and-recursive-calculate-value-by-group/m-p/670531#M201310</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2020-07-19T23:09:37Z</dc:date>
    </item>
    <item>
      <title>Re: retain and recursive calculate value by group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/retain-and-recursive-calculate-value-by-group/m-p/670533#M201312</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input age country $ region $ x;
datalines;
1 FR Europe 0.5
2 FR Europe 0.6
3 FR Europe 0.7
4 FR Europe 0.8
5 FR Europe 0.9
1 US America 0.1
2 US America 0.2
3 US America 0.3
4 US America 0.4
5 US America 0.5
;

proc sort data=have;
   by country region age;

data want (drop=prev_y prev_x);
   set have;
   by country region;
   retain prev_x prev_y;
   if first.region then y = 1;
   else y = prev_y * (1 - prev_x);
   prev_y = y;
   prev_x = x;
run;

proc print data=want noobs;

** Results **;
age	country	region	x	y
1	FR	Europe	0.5	1.0000
2	FR	Europe	0.6	0.5000
3	FR	Europe	0.7	0.2000
4	FR	Europe	0.8	0.0600
5	FR	Europe	0.9	0.0120
1	US	America	0.1	1.0000
2	US	America	0.2	0.9000
3	US	America	0.3	0.7200
4	US	America	0.4	0.5040
5	US	America	0.5	0.3024&lt;/CODE&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;This code explicitly uses retain to keep the previous values.&amp;nbsp; I find it simpler to know exactly which variables are being kept.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sun, 19 Jul 2020 23:20:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/retain-and-recursive-calculate-value-by-group/m-p/670533#M201312</guid>
      <dc:creator>qatman28</dc:creator>
      <dc:date>2020-07-19T23:20:20Z</dc:date>
    </item>
    <item>
      <title>Re: retain and recursive calculate value by group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/retain-and-recursive-calculate-value-by-group/m-p/670534#M201313</link>
      <description>Many thanks , i was a little confused , this is exactly what i wanted ...</description>
      <pubDate>Sun, 19 Jul 2020 23:28:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/retain-and-recursive-calculate-value-by-group/m-p/670534#M201313</guid>
      <dc:creator>bebess</dc:creator>
      <dc:date>2020-07-19T23:28:40Z</dc:date>
    </item>
  </channel>
</rss>

