<?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: Look up to upper value in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Look-up-to-upper-value/m-p/742049#M232039</link>
    <description>&lt;P&gt;Here is a way to use an IF test, via the IFN function:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
  set have;
  date=ifn(date=.,lag(date),date);
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;But this only replaces all missing date values when there are never two consecutive missing date values.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;A more general solution:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want (drop=_:);
  set have (rename=(date=_check));
  if _check ^=. then set have point=_n_;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;This relies on the fact that variables read via a SET statement are automatically retained - until another SET reads in the same variable, which usually happens with every incoming obs.&amp;nbsp; But the conditional set statement above (if _check^=. then set have point=_n_) only reads non-missing values for DATE and automatically retains that value.&amp;nbsp; And unlike the first example, this would propagate non-missing DATE values over multiple consecutive observations with missing values for _CHECK.&lt;/P&gt;</description>
    <pubDate>Tue, 18 May 2021 03:26:41 GMT</pubDate>
    <dc:creator>mkeintz</dc:creator>
    <dc:date>2021-05-18T03:26:41Z</dc:date>
    <item>
      <title>Look up to upper value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Look-up-to-upper-value/m-p/742042#M232036</link>
      <description>&lt;P&gt;good day all,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;here is&amp;nbsp; my data set&lt;/P&gt;
&lt;DIV class="branch"&gt;
&lt;TABLE class="c Table" summary="Procedure Print: Data Set WORK.TEMP_LIST" width="191px" align="center"&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="c t Header" width="40px" height="19px"&gt;Obs&lt;/TH&gt;
&lt;TH class="c t Header" width="98px" height="19px"&gt;Date&lt;/TH&gt;
&lt;TH class="c t Header" width="52px" height="19px"&gt;rownum&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="40px" height="30px" class="r t RowHeader"&gt;1&lt;/TD&gt;
&lt;TD width="98px" height="30px" class="r t Data"&gt;01APR2021&lt;/TD&gt;
&lt;TD width="52px" height="30px" class="r t Data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px" height="30px" class="r t RowHeader"&gt;2&lt;/TD&gt;
&lt;TD width="98px" height="30px" class="r t Data"&gt;.&lt;/TD&gt;
&lt;TD width="52px" height="30px" class="r t Data"&gt;2&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px" height="30px" class="r t RowHeader"&gt;3&lt;/TD&gt;
&lt;TD width="98px" height="30px" class="r t Data"&gt;02APR2021&lt;/TD&gt;
&lt;TD width="52px" height="30px" class="r t Data"&gt;3&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px" height="30px" class="r t RowHeader"&gt;4&lt;/TD&gt;
&lt;TD width="98px" height="30px" class="r t Data"&gt;05APR2021&lt;/TD&gt;
&lt;TD width="52px" height="30px" class="r t Data"&gt;4&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px" height="30px" class="r t RowHeader"&gt;5&lt;/TD&gt;
&lt;TD width="98px" height="30px" class="r t Data"&gt;06APR2021&lt;/TD&gt;
&lt;TD width="52px" height="30px" class="r t Data"&gt;5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px" height="30px" class="r t RowHeader"&gt;6&lt;/TD&gt;
&lt;TD width="98px" height="30px" class="r t Data"&gt;07APR2021&lt;/TD&gt;
&lt;TD width="52px" height="30px" class="r t Data"&gt;6&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px" height="30px" class="r t RowHeader"&gt;7&lt;/TD&gt;
&lt;TD width="98px" height="30px" class="r t Data"&gt;.&lt;/TD&gt;
&lt;TD width="52px" height="30px" class="r t Data"&gt;7&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px" height="30px" class="r t RowHeader"&gt;8&lt;/TD&gt;
&lt;TD width="98px" height="30px" class="r t Data"&gt;08APR2021&lt;/TD&gt;
&lt;TD width="52px" height="30px" class="r t Data"&gt;8&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px" height="30px" class="r t RowHeader"&gt;9&lt;/TD&gt;
&lt;TD width="98px" height="30px" class="r t Data"&gt;09APR2021&lt;/TD&gt;
&lt;TD width="52px" height="30px" class="r t Data"&gt;9&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px" height="30px" class="r t RowHeader"&gt;10&lt;/TD&gt;
&lt;TD width="98px" height="30px" class="r t Data"&gt;12APR2021&lt;/TD&gt;
&lt;TD width="52px" height="30px" class="r t Data"&gt;10&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px" height="30px" class="r t RowHeader"&gt;11&lt;/TD&gt;
&lt;TD width="98px" height="30px" class="r t Data"&gt;.&lt;/TD&gt;
&lt;TD width="52px" height="30px" class="r t Data"&gt;11&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px" height="30px" class="r t RowHeader"&gt;12&lt;/TD&gt;
&lt;TD width="98px" height="30px" class="r t Data"&gt;13APR2021&lt;/TD&gt;
&lt;TD width="52px" height="30px" class="r t Data"&gt;12&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px" height="30px" class="r t RowHeader"&gt;13&lt;/TD&gt;
&lt;TD width="98px" height="30px" class="r t Data"&gt;14APR2021&lt;/TD&gt;
&lt;TD width="52px" height="30px" class="r t Data"&gt;13&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px" height="30px" class="r t RowHeader"&gt;14&lt;/TD&gt;
&lt;TD width="98px" height="30px" class="r t Data"&gt;15APR2021&lt;/TD&gt;
&lt;TD width="52px" height="30px" class="r t Data"&gt;14&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px" height="30px" class="r t RowHeader"&gt;15&lt;/TD&gt;
&lt;TD width="98px" height="30px" class="r t Data"&gt;16APR2021&lt;/TD&gt;
&lt;TD width="52px" height="30px" class="r t Data"&gt;15&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px" height="30px" class="r t RowHeader"&gt;16&lt;/TD&gt;
&lt;TD width="98px" height="30px" class="r t Data"&gt;19APR2021&lt;/TD&gt;
&lt;TD width="52px" height="30px" class="r t Data"&gt;16&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px" height="30px" class="r t RowHeader"&gt;17&lt;/TD&gt;
&lt;TD width="98px" height="30px" class="r t Data"&gt;20APR2021&lt;/TD&gt;
&lt;TD width="52px" height="30px" class="r t Data"&gt;17&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px" height="30px" class="r t RowHeader"&gt;18&lt;/TD&gt;
&lt;TD width="98px" height="30px" class="r t Data"&gt;21APR2021&lt;/TD&gt;
&lt;TD width="52px" height="30px" class="r t Data"&gt;18&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px" height="30px" class="r t RowHeader"&gt;19&lt;/TD&gt;
&lt;TD width="98px" height="30px" class="r t Data"&gt;22APR2021&lt;/TD&gt;
&lt;TD width="52px" height="30px" class="r t Data"&gt;19&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px" height="30px" class="r t RowHeader"&gt;20&lt;/TD&gt;
&lt;TD width="98px" height="30px" class="r t Data"&gt;23APR2021&lt;/TD&gt;
&lt;TD width="52px" height="30px" class="r t Data"&gt;20&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px" height="30px" class="r t RowHeader"&gt;21&lt;/TD&gt;
&lt;TD width="98px" height="30px" class="r t Data"&gt;26APR2021&lt;/TD&gt;
&lt;TD width="52px" height="30px" class="r t Data"&gt;21&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px" height="30px" class="r t RowHeader"&gt;22&lt;/TD&gt;
&lt;TD width="98px" height="30px" class="r t Data"&gt;27APR2021&lt;/TD&gt;
&lt;TD width="52px" height="30px" class="r t Data"&gt;22&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px" height="30px" class="r t RowHeader"&gt;23&lt;/TD&gt;
&lt;TD width="98px" height="30px" class="r t Data"&gt;28APR2021&lt;/TD&gt;
&lt;TD width="52px" height="30px" class="r t Data"&gt;23&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px" height="30px" class="r t RowHeader"&gt;24&lt;/TD&gt;
&lt;TD width="98px" height="30px" class="r t Data"&gt;29APR2021&lt;/TD&gt;
&lt;TD width="52px" height="30px" class="r t Data"&gt;24&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="40px" height="30px" class="r t RowHeader"&gt;25&lt;/TD&gt;
&lt;TD width="98px" height="30px" class="r t Data"&gt;30APR2021&lt;/TD&gt;
&lt;TD width="52px" height="30px" class="r t Data"&gt;25&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;for the missing value, i want to write a program for auto look up the upper value.&lt;/P&gt;
&lt;P&gt;for the example&amp;nbsp;Obs 2 will equal&amp;nbsp;01APR2021. i know a function called retain would do . But can i use if then for my question?&amp;nbsp; if date is missing , then date =&amp;nbsp; date (current rownum-1).&amp;nbsp; if it is possible, i can be more creative in my future program. thanks you&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Regards,&lt;/P&gt;
&lt;P&gt;Harry&lt;/P&gt;
&lt;/DIV&gt;</description>
      <pubDate>Tue, 18 May 2021 02:21:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Look-up-to-upper-value/m-p/742042#M232036</guid>
      <dc:creator>harrylui</dc:creator>
      <dc:date>2021-05-18T02:21:13Z</dc:date>
    </item>
    <item>
      <title>Re: Look up to upper value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Look-up-to-upper-value/m-p/742049#M232039</link>
      <description>&lt;P&gt;Here is a way to use an IF test, via the IFN function:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
  set have;
  date=ifn(date=.,lag(date),date);
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;But this only replaces all missing date values when there are never two consecutive missing date values.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;A more general solution:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want (drop=_:);
  set have (rename=(date=_check));
  if _check ^=. then set have point=_n_;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;This relies on the fact that variables read via a SET statement are automatically retained - until another SET reads in the same variable, which usually happens with every incoming obs.&amp;nbsp; But the conditional set statement above (if _check^=. then set have point=_n_) only reads non-missing values for DATE and automatically retains that value.&amp;nbsp; And unlike the first example, this would propagate non-missing DATE values over multiple consecutive observations with missing values for _CHECK.&lt;/P&gt;</description>
      <pubDate>Tue, 18 May 2021 03:26:41 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Look-up-to-upper-value/m-p/742049#M232039</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2021-05-18T03:26:41Z</dc:date>
    </item>
    <item>
      <title>Re: Look up to upper value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Look-up-to-upper-value/m-p/742065#M232045</link>
      <description>thank you so much</description>
      <pubDate>Tue, 18 May 2021 07:03:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Look-up-to-upper-value/m-p/742065#M232045</guid>
      <dc:creator>harrylui</dc:creator>
      <dc:date>2021-05-18T07:03:20Z</dc:date>
    </item>
  </channel>
</rss>

