<?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: using retain to generate baseline values in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/using-retain-to-generate-baseline-values/m-p/517543#M139959</link>
    <description>&lt;P&gt;See my comments below. The problem is the last step, where SAS does what you tell it to do. If you follow through the steps using the debugger that may help, but I also tried the illustrate the logic.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;So your logic is wrong, even though your code is correct. Hope that makes sense.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;SAS Output&lt;/P&gt;
&lt;DIV class="branch"&gt;
&lt;DIV&gt;
&lt;DIV align="center"&gt;
&lt;TABLE class="table" summary="Procedure Print: Data Set WORK.TAC" frame="box" rules="all" cellspacing="0" cellpadding="5"&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="r header" scope="col"&gt;Obs&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;randomization&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;visit&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;tac&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;tac_v2&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;1&lt;/TH&gt;
&lt;TD class="r data"&gt;618001&lt;/TD&gt;
&lt;TD class="r data"&gt;2&lt;/TD&gt;
&lt;TD class="r data"&gt;8824&lt;/TD&gt;
&lt;TD class="r data"&gt;8824&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;2&lt;/TH&gt;
&lt;TD class="r data"&gt;618001&lt;/TD&gt;
&lt;TD class="r data"&gt;3&lt;/TD&gt;
&lt;TD class="r data"&gt;9088&lt;/TD&gt;
&lt;TD class="r data"&gt;.&amp;nbsp;&lt;STRONG&gt;&lt;FONT color="#FF0000"&gt;max(base_tac, tac_v2) - &amp;gt; base_tac = 8824, tac_v2=.&amp;nbsp; so the max is 8824&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;3&lt;/TH&gt;
&lt;TD class="r data"&gt;618001&lt;/TD&gt;
&lt;TD class="r data"&gt;4&lt;/TD&gt;
&lt;TD class="r data"&gt;9784&lt;/TD&gt;
&lt;TD class="r data"&gt;. &lt;STRONG&gt;(same as above)&lt;/STRONG&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;4&lt;/TH&gt;
&lt;TD class="r data"&gt;618002&lt;/TD&gt;
&lt;TD class="r data"&gt;2&lt;/TD&gt;
&lt;TD class="r data"&gt;7962&lt;/TD&gt;
&lt;TD class="r data"&gt;7962&amp;nbsp;&lt;FONT color="#FF0000"&gt;Note you have not reset any values here, so base_tac=8824 , tac_v2=7962 and max is 8824 like you've requested.&lt;/FONT&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;5&lt;/TH&gt;
&lt;TD class="r data"&gt;618002&lt;/TD&gt;
&lt;TD class="r data"&gt;3&lt;/TD&gt;
&lt;TD class="r data"&gt;8318&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;6&lt;/TH&gt;
&lt;TD class="r data"&gt;618002&lt;/TD&gt;
&lt;TD class="r data"&gt;4&lt;/TD&gt;
&lt;TD class="r data"&gt;8819&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;7&lt;/TH&gt;
&lt;TD class="r data"&gt;618003&lt;/TD&gt;
&lt;TD class="r data"&gt;2&lt;/TD&gt;
&lt;TD class="r data"&gt;10630&lt;/TD&gt;
&lt;TD class="r data"&gt;10630&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;8&lt;/TH&gt;
&lt;TD class="r data"&gt;618003&lt;/TD&gt;
&lt;TD class="r data"&gt;3&lt;/TD&gt;
&lt;TD class="r data"&gt;8906&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;9&lt;/TH&gt;
&lt;TD class="r data"&gt;618003&lt;/TD&gt;
&lt;TD class="r data"&gt;4&lt;/TD&gt;
&lt;TD class="r data"&gt;9796&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/117839"&gt;@superbibi&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/13879"&gt;@Reeza&lt;/a&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/138205"&gt;@novinosrin&lt;/a&gt;, thank you both. Your code is good! But could you point out what is wrong with my code?&amp;nbsp;&lt;/P&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;</description>
    <pubDate>Fri, 30 Nov 2018 16:14:27 GMT</pubDate>
    <dc:creator>Reeza</dc:creator>
    <dc:date>2018-11-30T16:14:27Z</dc:date>
    <item>
      <title>using retain to generate baseline values</title>
      <link>https://communities.sas.com/t5/SAS-Programming/using-retain-to-generate-baseline-values/m-p/517524#M139947</link>
      <description>&lt;PRE&gt;&lt;BR /&gt;&lt;CODE class=" language-sas"&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Hi friend, I have a data set and I want to generate the baseline value. Can you point out why my code does not work? Thank you.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;data I have:&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;Obs&lt;/TD&gt;&lt;TD&gt;randomization&lt;/TD&gt;&lt;TD&gt;visit&lt;/TD&gt;&lt;TD&gt;tac&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;618001&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;8824&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;618001&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;9088&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;618001&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;9784&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;618002&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;7962&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;618002&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;8318&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;618002&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;8819&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;618003&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;10630&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;618003&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;8906&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;TD&gt;618003&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;9796&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;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;data I want:&lt;BR /&gt;&lt;BR /&gt;&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;Obs&lt;/TD&gt;&lt;TD&gt;randomization&lt;/TD&gt;&lt;TD&gt;visit&lt;/TD&gt;&lt;TD&gt;tac&lt;/TD&gt;&lt;TD&gt;base_tac&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;618001&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;8824&lt;/TD&gt;&lt;TD&gt;8824&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;618001&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;9088&lt;/TD&gt;&lt;TD&gt;8824&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;618001&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;9784&lt;/TD&gt;&lt;TD&gt;8824&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;618002&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;7962&lt;/TD&gt;&lt;TD&gt;7962&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;618002&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;8318&lt;/TD&gt;&lt;TD&gt;7962&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;618002&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;8819&lt;/TD&gt;&lt;TD&gt;7962&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;618003&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;10630&lt;/TD&gt;&lt;TD&gt;10630&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;618003&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;8906&lt;/TD&gt;&lt;TD&gt;10630&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;TD&gt;618003&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;9796&lt;/TD&gt;&lt;TD&gt;10630&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 tac;
input randomization visit tac;
datalines;
618001 2 8824
618001 3 9088
618001 4 9784
618002 2 7962
618002 3 8318
618002 4 8819
618003 2 10630
618003 3 8906
618003 4 9796
;
run;

data tac;
set tac;
if visit = 2 then tac_v2 = tac  ;
run;

proc sort data = tac;
by randomization visit;
run;

data tac;
set tac;
by randomization;
retain base_tac ;
base_tac = max(base_tac ,tac_v2);
run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;outpute of the code;&lt;/P&gt;&lt;P&gt;Obs randomization visit tac tac_v2 base_tac123456789&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;618001&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;8824&lt;/TD&gt;&lt;TD&gt;8824&lt;/TD&gt;&lt;TD&gt;8824&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;618001&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;9088&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;8824&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;618001&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;9784&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;8824&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;618002&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;7962&lt;/TD&gt;&lt;TD&gt;7962&lt;/TD&gt;&lt;TD&gt;8824&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;618002&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;8318&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;8824&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;618002&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;8819&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;8824&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;618003&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;10630&lt;/TD&gt;&lt;TD&gt;10630&lt;/TD&gt;&lt;TD&gt;10630&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;618003&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;8906&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;10630&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;618003&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;9796&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;10630&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
      <pubDate>Fri, 30 Nov 2018 15:53:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/using-retain-to-generate-baseline-values/m-p/517524#M139947</guid>
      <dc:creator>superbibi</dc:creator>
      <dc:date>2018-11-30T15:53:22Z</dc:date>
    </item>
    <item>
      <title>Re: using retain to generate baseline values</title>
      <link>https://communities.sas.com/t5/SAS-Programming/using-retain-to-generate-baseline-values/m-p/517526#M139948</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
data tac;
input randomization visit tac;
datalines;
618001 2 8824
618001 3 9088
618001 4 9784
618002 2 7962
618002 3 8318
618002 4 8819
618003 2 10630
618003 3 8906
618003 4 9796
;
run;

data want;
set tac;
by randomization;
retain base_tac;
if first.randomization then base_tac=tac;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 30 Nov 2018 15:57:02 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/using-retain-to-generate-baseline-values/m-p/517526#M139948</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2018-11-30T15:57:02Z</dc:date>
    </item>
    <item>
      <title>Re: using retain to generate baseline values</title>
      <link>https://communities.sas.com/t5/SAS-Programming/using-retain-to-generate-baseline-values/m-p/517528#M139949</link>
      <description>&lt;P&gt;Not sure why yours doesn't work, but you have a few things that may be causing it.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;1. Don't use the same name in the DATA and SET statement. This makes it really hard to debug code (case in point) and you have to remember to always run your code from the top.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It's also more steps, you should sort and assign baseline.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data tac;
input randomization visit tac;
datalines;
618001 2 8824
618001 3 9088
618001 4 9784
618002 2 7962
618002 3 8318
618002 4 8819
618003 2 10630
618003 3 8906
618003 4 9796
;
run;

proc sort data = tac;
by randomization visit;
run;

data tac;
set tac;
by randomization;
retain tac_baseline;
if first.randomization then tac_baseline=tac;  ;
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>Fri, 30 Nov 2018 15:59:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/using-retain-to-generate-baseline-values/m-p/517528#M139949</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2018-11-30T15:59:08Z</dc:date>
    </item>
    <item>
      <title>Re: using retain to generate baseline values</title>
      <link>https://communities.sas.com/t5/SAS-Programming/using-retain-to-generate-baseline-values/m-p/517531#M139952</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/13879"&gt;@Reeza&lt;/a&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/138205"&gt;@novinosrin&lt;/a&gt;, thank you both. Your code is good! But could you point out what is wrong with my code?&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 30 Nov 2018 16:01:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/using-retain-to-generate-baseline-values/m-p/517531#M139952</guid>
      <dc:creator>superbibi</dc:creator>
      <dc:date>2018-11-30T16:01:30Z</dc:date>
    </item>
    <item>
      <title>Re: using retain to generate baseline values</title>
      <link>https://communities.sas.com/t5/SAS-Programming/using-retain-to-generate-baseline-values/m-p/517532#M139953</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;hello,&lt;/P&gt;&lt;P&gt;I propose this solution:&lt;/P&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 tac;
input randomization visit tac;
datalines;
618001 2 8824
618001 3 9088
618001 4 9784
618002 2 7962
618002 3 8318
618002 4 8819
618003 2 10630
618003 3 8906
618003 4 9796
;
run;

 proc sql;
 create table test as select a.* ,base_tak
 from tac as a
 inner join 

 (select tac as base_tak ,randomization from 
 tac where visit=2) as b
on a.randomization=b.randomization
;
quit;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 30 Nov 2018 16:02:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/using-retain-to-generate-baseline-values/m-p/517532#M139953</guid>
      <dc:creator>mansour_ib_sas</dc:creator>
      <dc:date>2018-11-30T16:02:33Z</dc:date>
    </item>
    <item>
      <title>Re: using retain to generate baseline values</title>
      <link>https://communities.sas.com/t5/SAS-Programming/using-retain-to-generate-baseline-values/m-p/517543#M139959</link>
      <description>&lt;P&gt;See my comments below. The problem is the last step, where SAS does what you tell it to do. If you follow through the steps using the debugger that may help, but I also tried the illustrate the logic.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;So your logic is wrong, even though your code is correct. Hope that makes sense.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;SAS Output&lt;/P&gt;
&lt;DIV class="branch"&gt;
&lt;DIV&gt;
&lt;DIV align="center"&gt;
&lt;TABLE class="table" summary="Procedure Print: Data Set WORK.TAC" frame="box" rules="all" cellspacing="0" cellpadding="5"&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="r header" scope="col"&gt;Obs&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;randomization&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;visit&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;tac&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;tac_v2&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;1&lt;/TH&gt;
&lt;TD class="r data"&gt;618001&lt;/TD&gt;
&lt;TD class="r data"&gt;2&lt;/TD&gt;
&lt;TD class="r data"&gt;8824&lt;/TD&gt;
&lt;TD class="r data"&gt;8824&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;2&lt;/TH&gt;
&lt;TD class="r data"&gt;618001&lt;/TD&gt;
&lt;TD class="r data"&gt;3&lt;/TD&gt;
&lt;TD class="r data"&gt;9088&lt;/TD&gt;
&lt;TD class="r data"&gt;.&amp;nbsp;&lt;STRONG&gt;&lt;FONT color="#FF0000"&gt;max(base_tac, tac_v2) - &amp;gt; base_tac = 8824, tac_v2=.&amp;nbsp; so the max is 8824&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;3&lt;/TH&gt;
&lt;TD class="r data"&gt;618001&lt;/TD&gt;
&lt;TD class="r data"&gt;4&lt;/TD&gt;
&lt;TD class="r data"&gt;9784&lt;/TD&gt;
&lt;TD class="r data"&gt;. &lt;STRONG&gt;(same as above)&lt;/STRONG&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;4&lt;/TH&gt;
&lt;TD class="r data"&gt;618002&lt;/TD&gt;
&lt;TD class="r data"&gt;2&lt;/TD&gt;
&lt;TD class="r data"&gt;7962&lt;/TD&gt;
&lt;TD class="r data"&gt;7962&amp;nbsp;&lt;FONT color="#FF0000"&gt;Note you have not reset any values here, so base_tac=8824 , tac_v2=7962 and max is 8824 like you've requested.&lt;/FONT&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;5&lt;/TH&gt;
&lt;TD class="r data"&gt;618002&lt;/TD&gt;
&lt;TD class="r data"&gt;3&lt;/TD&gt;
&lt;TD class="r data"&gt;8318&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;6&lt;/TH&gt;
&lt;TD class="r data"&gt;618002&lt;/TD&gt;
&lt;TD class="r data"&gt;4&lt;/TD&gt;
&lt;TD class="r data"&gt;8819&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;7&lt;/TH&gt;
&lt;TD class="r data"&gt;618003&lt;/TD&gt;
&lt;TD class="r data"&gt;2&lt;/TD&gt;
&lt;TD class="r data"&gt;10630&lt;/TD&gt;
&lt;TD class="r data"&gt;10630&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;8&lt;/TH&gt;
&lt;TD class="r data"&gt;618003&lt;/TD&gt;
&lt;TD class="r data"&gt;3&lt;/TD&gt;
&lt;TD class="r data"&gt;8906&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TH class="r rowheader" scope="row"&gt;9&lt;/TH&gt;
&lt;TD class="r data"&gt;618003&lt;/TD&gt;
&lt;TD class="r data"&gt;4&lt;/TD&gt;
&lt;TD class="r data"&gt;9796&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/117839"&gt;@superbibi&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/13879"&gt;@Reeza&lt;/a&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/138205"&gt;@novinosrin&lt;/a&gt;, thank you both. Your code is good! But could you point out what is wrong with my code?&amp;nbsp;&lt;/P&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;</description>
      <pubDate>Fri, 30 Nov 2018 16:14:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/using-retain-to-generate-baseline-values/m-p/517543#M139959</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2018-11-30T16:14:27Z</dc:date>
    </item>
    <item>
      <title>Re: using retain to generate baseline values</title>
      <link>https://communities.sas.com/t5/SAS-Programming/using-retain-to-generate-baseline-values/m-p/517548#M139964</link>
      <description>&lt;P&gt;alternatively also try&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data tac;
input randomization visit tac;
datalines;
618001 2 8824
618001 3 9088
618001 4 9784
618002 2 7962
618002 3 8318
618002 4 8819
618003 2 10630
618003 3 8906
618003 4 9796
;
run;

data want;
do until(last.randomization);
set tac;
by randomization;
if first.randomization then base=tac;
end;
do until(last.randomization);
set tac;
by randomization;
output;
end;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 30 Nov 2018 16:20:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/using-retain-to-generate-baseline-values/m-p/517548#M139964</guid>
      <dc:creator>Jagadishkatam</dc:creator>
      <dc:date>2018-11-30T16:20:39Z</dc:date>
    </item>
    <item>
      <title>Re: using retain to generate baseline values</title>
      <link>https://communities.sas.com/t5/SAS-Programming/using-retain-to-generate-baseline-values/m-p/517556#M139970</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/13879"&gt;@Reeza&lt;/a&gt;, Thank you for the explanation. I cannot understand the logic of by. I assumed that using by statement, the following procedure&amp;nbsp;will repeat for each by group. So the retain statement can be repeated for each by group. It seems that SAS is not using this logic.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 30 Nov 2018 16:32:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/using-retain-to-generate-baseline-values/m-p/517556#M139970</guid>
      <dc:creator>superbibi</dc:creator>
      <dc:date>2018-11-30T16:32:11Z</dc:date>
    </item>
    <item>
      <title>Re: using retain to generate baseline values</title>
      <link>https://communities.sas.com/t5/SAS-Programming/using-retain-to-generate-baseline-values/m-p/517558#M139972</link>
      <description>&lt;P&gt;You do have the right answers already posted.&amp;nbsp; I wasn't sure if it would help to answer your question with a short version.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The RETAIN statement always retains TAC_BASELINE.&amp;nbsp; But that's not what you need.&amp;nbsp; You need to start the logic over again, each time RANDOMIZATION changes.&amp;nbsp; As it stands, your program never starts over.&lt;/P&gt;</description>
      <pubDate>Fri, 30 Nov 2018 16:36:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/using-retain-to-generate-baseline-values/m-p/517558#M139972</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2018-11-30T16:36:05Z</dc:date>
    </item>
    <item>
      <title>Re: using retain to generate baseline values</title>
      <link>https://communities.sas.com/t5/SAS-Programming/using-retain-to-generate-baseline-values/m-p/517563#M139975</link>
      <description>&lt;P&gt;A by statement does the following:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;it checks that the data is sorted in the correct order&lt;/LI&gt;
&lt;LI&gt;it creates two automatic variables first.x and last.x for every variable contained in the by (insert the variable name for x) that are set to true for the first and last observation of each group, and false otherwise&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;and nothing more. It's up to the programmer to build the logic with first. and last.&lt;/P&gt;
&lt;P&gt;Automatic reset of retained variables is not possible, as SAS would have no way to know when to reset if more than one level is present in the by.&lt;/P&gt;</description>
      <pubDate>Fri, 30 Nov 2018 16:42:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/using-retain-to-generate-baseline-values/m-p/517563#M139975</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2018-11-30T16:42:47Z</dc:date>
    </item>
    <item>
      <title>Re: using retain to generate baseline values</title>
      <link>https://communities.sas.com/t5/SAS-Programming/using-retain-to-generate-baseline-values/m-p/517591#M139982</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/117839"&gt;@superbibi&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/13879"&gt;@Reeza&lt;/a&gt;, Thank you for the explanation. I cannot understand the logic of by. I assumed that using by statement, the following procedure&amp;nbsp;will repeat for each by group. So the retain statement can be repeated for each by group. It seems that SAS is not using this logic.&amp;nbsp;&lt;/P&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;That's not a correct understanding of BY logic.&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/11562"&gt;@Kurt_Bremser&lt;/a&gt;&amp;nbsp;response details it and the documentation chapter on it is pretty decent IMO.&lt;/P&gt;
&lt;P&gt;&lt;A href="https://documentation.sas.com/?docsetId=lrcon&amp;amp;docsetTarget=n01a08zkzy5igbn173zjz82zsi1s.htm&amp;amp;docsetVersion=9.4&amp;amp;locale=en#n0oteuuy1erlmvn1l9valku9ihmi" target="_blank"&gt;https://documentation.sas.com/?docsetId=lrcon&amp;amp;docsetTarget=n01a08zkzy5igbn173zjz82zsi1s.htm&amp;amp;docsetVersion=9.4&amp;amp;locale=en#n0oteuuy1erlmvn1l9valku9ihmi&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 30 Nov 2018 17:44:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/using-retain-to-generate-baseline-values/m-p/517591#M139982</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2018-11-30T17:44:35Z</dc:date>
    </item>
  </channel>
</rss>

