<?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 statement in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/retain-statement/m-p/511273#M137565</link>
    <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data xy;

input id $ flag  var1 $;

datalines;
A    1       x1         
A    0      x2           
B    0       x1          
B    0       x2  
;

run;

data want;
set xy;
by id;
retain want;
if first.id then _flag=0;
_flag+flag;
if flag or _flag=0 then want=var1 ;
drop _:;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Thu, 08 Nov 2018 04:58:12 GMT</pubDate>
    <dc:creator>novinosrin</dc:creator>
    <dc:date>2018-11-08T04:58:12Z</dc:date>
    <item>
      <title>retain statement</title>
      <link>https://communities.sas.com/t5/SAS-Programming/retain-statement/m-p/511263#M137562</link>
      <description>&lt;P&gt;Hi,&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I have a question regarding retain statement. I have the following dataset:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;Dataset:&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;ID&amp;nbsp; &amp;nbsp;flag&amp;nbsp; var1&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/P&gt;
&lt;P&gt;A&amp;nbsp; &amp;nbsp; 1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;x1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/P&gt;
&lt;P&gt;A&amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp; &amp;nbsp; x2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/P&gt;
&lt;P&gt;B&amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;x1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;B&amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;x2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;Result expecting :&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;ID&amp;nbsp; &amp;nbsp;flag&amp;nbsp; var1&amp;nbsp; &amp;nbsp; &amp;nbsp; want_var2&lt;/P&gt;
&lt;P&gt;A&amp;nbsp; &amp;nbsp; 1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;x1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x1&lt;/P&gt;
&lt;P&gt;A&amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp; &amp;nbsp; x2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;x1&lt;/P&gt;
&lt;P&gt;B&amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;x1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x1&lt;/P&gt;
&lt;P&gt;B&amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;x2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;x2&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;I am trying to retain the value&amp;nbsp;of 'var1' if the flag=1 to the next observation of the same id, and keep the same value of var1 if the flag=0.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I am using the&amp;nbsp; code as below:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data xy;&lt;/P&gt;
&lt;P&gt;input id $ flag $ z $;&lt;/P&gt;
&lt;P&gt;datalines;&lt;/P&gt;
&lt;P&gt;A 1 A1&lt;/P&gt;
&lt;P&gt;A 0 A2&lt;/P&gt;
&lt;P&gt;B 0 B1&lt;/P&gt;
&lt;P&gt;B 0 B2&lt;/P&gt;
&lt;P&gt;;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;proc sort data=xy; by id descending flag; run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data xyz;&lt;/P&gt;
&lt;P&gt;set xy;&lt;/P&gt;
&lt;P&gt;by id descending flag;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;retain xy xy2;&lt;/P&gt;
&lt;P&gt;if first.id and flag=1 then do;&lt;/P&gt;
&lt;P&gt;xy=Z;&lt;/P&gt;
&lt;P&gt;end;&lt;/P&gt;
&lt;P&gt;else if first.id and flag=0 then do;&lt;/P&gt;
&lt;P&gt;xy=z;&lt;/P&gt;
&lt;P&gt;end;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you in advance.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 08 Nov 2018 02:33:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/retain-statement/m-p/511263#M137562</guid>
      <dc:creator>new510</dc:creator>
      <dc:date>2018-11-08T02:33:31Z</dc:date>
    </item>
    <item>
      <title>Re: retain statement</title>
      <link>https://communities.sas.com/t5/SAS-Programming/retain-statement/m-p/511264#M137563</link>
      <description>&lt;P&gt;I think you misunderstand what RETAIN does.&lt;/P&gt;
&lt;P&gt;This does what you want:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data WANT; 
  set HAVE;
  LAST_VAR1=lag(VAR1);
  VAR2=ifc(lag(FLAG)=1 &amp;amp; lag(ID)=ID, LAST_VAR1, VAR1);
  drop LAST_VAR1; 
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV class="branch"&gt;
&lt;DIV&gt;
&lt;DIV align="left"&gt;
&lt;TABLE class="table" summary="Procedure Print: Data Set WORK.WANT" 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;/COLGROUP&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="l header" scope="col"&gt;ID&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;FLAG&lt;/TH&gt;
&lt;TH class="l header" scope="col"&gt;VAR1&lt;/TH&gt;
&lt;TH class="l header" scope="col"&gt;VAR2&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;A&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="l data"&gt;x1&lt;/TD&gt;
&lt;TD class="l data"&gt;x1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;A&lt;/TD&gt;
&lt;TD class="r data"&gt;0&lt;/TD&gt;
&lt;TD class="l data"&gt;x2&lt;/TD&gt;
&lt;TD class="l data"&gt;x1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;B&lt;/TD&gt;
&lt;TD class="r data"&gt;0&lt;/TD&gt;
&lt;TD class="l data"&gt;x1&lt;/TD&gt;
&lt;TD class="l data"&gt;x1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;B&lt;/TD&gt;
&lt;TD class="r data"&gt;0&lt;/TD&gt;
&lt;TD class="l data"&gt;x2&lt;/TD&gt;
&lt;TD class="l data"&gt;x2&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;</description>
      <pubDate>Thu, 08 Nov 2018 02:49:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/retain-statement/m-p/511264#M137563</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2018-11-08T02:49:42Z</dc:date>
    </item>
    <item>
      <title>Re: retain statement</title>
      <link>https://communities.sas.com/t5/SAS-Programming/retain-statement/m-p/511265#M137564</link>
      <description>Thank you, ChrisNZ</description>
      <pubDate>Thu, 08 Nov 2018 02:56:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/retain-statement/m-p/511265#M137564</guid>
      <dc:creator>new510</dc:creator>
      <dc:date>2018-11-08T02:56:10Z</dc:date>
    </item>
    <item>
      <title>Re: retain statement</title>
      <link>https://communities.sas.com/t5/SAS-Programming/retain-statement/m-p/511273#M137565</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data xy;

input id $ flag  var1 $;

datalines;
A    1       x1         
A    0      x2           
B    0       x1          
B    0       x2  
;

run;

data want;
set xy;
by id;
retain want;
if first.id then _flag=0;
_flag+flag;
if flag or _flag=0 then want=var1 ;
drop _:;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 08 Nov 2018 04:58:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/retain-statement/m-p/511273#M137565</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2018-11-08T04:58:12Z</dc:date>
    </item>
  </channel>
</rss>

