<?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: Choosing one-year prior 'same day' or 'end day' or their closest day if missing in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Choosing-one-year-prior-same-day-or-end-day-or-their-closest-day/m-p/820227#M323728</link>
    <description>&lt;P&gt;Thank you, Tom,&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Your code works way faster than I expected!&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The logic you are using is the one I was thinking. But I had a problem in creating workable codes. Yours are a bit over my head, but I will try to learn them.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I wish you a nice weekend!&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Sincerely,&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;KS -,&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Fri, 24 Jun 2022 12:37:09 GMT</pubDate>
    <dc:creator>KS99</dc:creator>
    <dc:date>2022-06-24T12:37:09Z</dc:date>
    <item>
      <title>Choosing one-year prior 'same day' or 'end day' or their closest day if missing</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Choosing-one-year-prior-same-day-or-end-day-or-their-closest-day/m-p/819582#M323519</link>
      <description>&lt;P&gt;Hi, greetings,&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you in advance, SAS community!&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I have a large US daily stock data. If a company (code: cusip) had an event on a certain day (code: date), I marked that observation with a new variable t=1, and t=. otherwise.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Now, I want to pick the stock price (code: prc) on the &lt;STRONG&gt;same day&lt;/STRONG&gt;&amp;nbsp;as the marked event day, but of a prior year. I also want to pick the stock price on the &lt;STRONG&gt;end day&lt;/STRONG&gt; of the event's prior year.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I know that I should use the intnx function. But I have a poor command of it and, whenever I used it, the function produced mechanically same days or end days which are sometimes non-existing in the previous year in my sample. Now, what I want to do is this:&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If such a same (end) day is missing, and thus its stock price is missing, I want to pick the nearest earlier day and its stock price instead.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To pick the same day from the prior year, I used the following code:&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data usa_stock_a; set Usa_stock; by cusip; if t=1 then Year_ago = intnx ('year', date,-1,'s'); run; &lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;So, in other words, my original dataset was:&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE width="322"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="63"&gt;CUSIP&lt;/TD&gt;
&lt;TD width="77"&gt;DATE&lt;/TD&gt;
&lt;TD width="91"&gt;PRC&lt;/TD&gt;
&lt;TD width="91"&gt;t&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;00030710&lt;/TD&gt;
&lt;TD&gt;2/20/2015&lt;/TD&gt;
&lt;TD&gt;30.38999939&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;00030710&lt;/TD&gt;
&lt;TD&gt;2/23/2015&lt;/TD&gt;
&lt;TD&gt;32.09999847&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;00030710&lt;/TD&gt;
&lt;TD&gt;2/24/2015&lt;/TD&gt;
&lt;TD&gt;33.25999832&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD colspan="4"&gt;.........................&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;00030710&lt;/TD&gt;
&lt;TD&gt;2/22/2016&lt;/TD&gt;
&lt;TD&gt;22.68000031&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;00030710&lt;/TD&gt;
&lt;TD&gt;2/23/2016&lt;/TD&gt;
&lt;TD&gt;23.23999977&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;00030710&lt;/TD&gt;
&lt;TD&gt;2/24/2016&lt;/TD&gt;
&lt;TD&gt;23.05999947&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;00030710&lt;/TD&gt;
&lt;TD&gt;2/25/2016&lt;/TD&gt;
&lt;TD&gt;22.72999954&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;00030710&lt;/TD&gt;
&lt;TD&gt;2/26/2016&lt;/TD&gt;
&lt;TD&gt;21.73999977&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;00030710&lt;/TD&gt;
&lt;TD&gt;2/29/2016&lt;/TD&gt;
&lt;TD&gt;21.4326678&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD colspan="4"&gt;….........................&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;00030710&lt;/TD&gt;
&lt;TD&gt;2/24/2017&lt;/TD&gt;
&lt;TD&gt;7.579999924&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;00030710&lt;/TD&gt;
&lt;TD&gt;2/27/2017&lt;/TD&gt;
&lt;TD&gt;7.590000153&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;00030710&lt;/TD&gt;
&lt;TD&gt;2/28/2017&lt;/TD&gt;
&lt;TD&gt;9.170000076&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;00030710&lt;/TD&gt;
&lt;TD&gt;3/1/2017&lt;/TD&gt;
&lt;TD&gt;8.909999847&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;00030710&lt;/TD&gt;
&lt;TD&gt;3/2/2017&lt;/TD&gt;
&lt;TD&gt;8.909999847&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;P&gt;I want to create the following:&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE width="505"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="63"&gt;CUSIP&lt;/TD&gt;
&lt;TD width="77"&gt;DATE&lt;/TD&gt;
&lt;TD width="91"&gt;PRC&lt;/TD&gt;
&lt;TD width="91"&gt;t&lt;/TD&gt;
&lt;TD width="77"&gt;Year_ago_1&lt;/TD&gt;
&lt;TD width="106"&gt;PRC_ago_1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;00030710&lt;/TD&gt;
&lt;TD&gt;2/20/2015&lt;/TD&gt;
&lt;TD&gt;30.38999939&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;00030710&lt;/TD&gt;
&lt;TD&gt;2/23/2015&lt;/TD&gt;
&lt;TD&gt;32.09999847&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;00030710&lt;/TD&gt;
&lt;TD&gt;2/24/2015&lt;/TD&gt;
&lt;TD&gt;33.25999832&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD colspan="6"&gt;.........................&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;00030710&lt;/TD&gt;
&lt;TD&gt;2/22/2016&lt;/TD&gt;
&lt;TD&gt;22.68000031&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;00030710&lt;/TD&gt;
&lt;TD&gt;2/23/2016&lt;/TD&gt;
&lt;TD&gt;23.23999977&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;2/23/2015&lt;/TD&gt;
&lt;TD&gt;32.09999847&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;00030710&lt;/TD&gt;
&lt;TD&gt;2/24/2016&lt;/TD&gt;
&lt;TD&gt;23.05999947&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;00030710&lt;/TD&gt;
&lt;TD&gt;2/25/2016&lt;/TD&gt;
&lt;TD&gt;22.72999954&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;00030710&lt;/TD&gt;
&lt;TD&gt;2/26/2016&lt;/TD&gt;
&lt;TD&gt;21.73999977&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;00030710&lt;/TD&gt;
&lt;TD&gt;2/29/2016&lt;/TD&gt;
&lt;TD&gt;21.4326678&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD colspan="6"&gt;….........................&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;00030710&lt;/TD&gt;
&lt;TD&gt;2/24/2017&lt;/TD&gt;
&lt;TD&gt;7.579999924&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;00030710&lt;/TD&gt;
&lt;TD&gt;2/27/2017&lt;/TD&gt;
&lt;TD&gt;7.590000153&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;2/26/2016&lt;/TD&gt;
&lt;TD&gt;21.73999977&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;00030710&lt;/TD&gt;
&lt;TD&gt;2/28/2017&lt;/TD&gt;
&lt;TD&gt;9.170000076&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;00030710&lt;/TD&gt;
&lt;TD&gt;3/1/2017&lt;/TD&gt;
&lt;TD&gt;8.909999847&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;.&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;00030710&lt;/TD&gt;
&lt;TD&gt;3/2/2017&lt;/TD&gt;
&lt;TD&gt;8.909999847&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;.&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;P&gt;If you teach me how to do this, I can do it for picking the end days by myself!&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Many thanks!&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;KS -,&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 22 Jun 2022 12:11:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Choosing-one-year-prior-same-day-or-end-day-or-their-closest-day/m-p/819582#M323519</guid>
      <dc:creator>KS99</dc:creator>
      <dc:date>2022-06-22T12:11:09Z</dc:date>
    </item>
    <item>
      <title>Re: Choosing one-year prior 'same day' or 'end day' or their closest day if missing</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Choosing-one-year-prior-same-day-or-end-day-or-their-closest-day/m-p/819588#M323521</link>
      <description>&lt;P&gt;This is UNTESTED code. If you want tested code, please provide data as SAS data step code (&lt;A href="https://blogs.sas.com/content/sastraining/2016/03/11/jedi-sas-tricks-data-to-data-step-macro/" target="_self"&gt;instructions&lt;/A&gt;).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This solution uses PROC SQL to merge the data with itself selecting the date one year earlier to merge with — and if that date doesn't exist, we look back a maximum of 5 days to find a date that does exist and then select the most recent date that does exist.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
    create table want as select
        a.*
        ,case when a.t=1 then b.date else . end as date_last_year format=date9.
        ,case when a.t=1 then b.prc else . end as prc_last_year
    from have as a left join have as b
        on a.cusip=b.cusip and (intnx('year',a.date,-1,'s')-b.date) between 0 and 5
    group by a.cusip,a.date
    having b.date=max(b.date);
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 22 Jun 2022 12:26:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Choosing-one-year-prior-same-day-or-end-day-or-their-closest-day/m-p/819588#M323521</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2022-06-22T12:26:23Z</dc:date>
    </item>
    <item>
      <title>Re: Choosing one-year prior 'same day' or 'end day' or their closest day if missing</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Choosing-one-year-prior-same-day-or-end-day-or-their-closest-day/m-p/819744#M323571</link>
      <description>&lt;P&gt;Dear PaigeMiller,&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you for your code!&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I tested your code, and it does work.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;One thing about it is that it takes way too much time, since my dataset has a few tens of millions of observations.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I do not care about the code length. If you have time, can you write a less time-taking one for me?&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Not only this time, but for many times in the past, I really appreciate your help, Miller!&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Sincerely,&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;KS -&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 22 Jun 2022 17:37:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Choosing-one-year-prior-same-day-or-end-day-or-their-closest-day/m-p/819744#M323571</guid>
      <dc:creator>KS99</dc:creator>
      <dc:date>2022-06-22T17:37:37Z</dc:date>
    </item>
    <item>
      <title>Re: Choosing one-year prior 'same day' or 'end day' or their closest day if missing</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Choosing-one-year-prior-same-day-or-end-day-or-their-closest-day/m-p/819756#M323575</link>
      <description>&lt;P&gt;I think you should start a new thread, explain the problem, and clearly state you want a relatively speedy solution for data sets that have tens of millions of observations.&lt;/P&gt;</description>
      <pubDate>Wed, 22 Jun 2022 17:58:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Choosing-one-year-prior-same-day-or-end-day-or-their-closest-day/m-p/819756#M323575</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2022-06-22T17:58:03Z</dc:date>
    </item>
    <item>
      <title>Re: Choosing one-year prior 'same day' or 'end day' or their closest day if missing</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Choosing-one-year-prior-same-day-or-end-day-or-their-closest-day/m-p/819786#M323576</link>
      <description>&lt;P&gt;This should run reasonably quickly (assuming data is already sorted).&lt;/P&gt;
&lt;P&gt;First note it is actually EASIER to post the code to create your dataset than it is to go to the trouble of trying to make a "pretty" table.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  infile cards truncover;
  input CUSIP $ DATE :mmddyy.  PRC  t ;
  format date yymmdd10.;
cards;
00030710  2/20/2015  30.38999939   
00030710  2/23/2015  32.09999847   
00030710  2/24/2015  33.25999832   
00030710  2/22/2016  22.68000031   
00030710  2/23/2016  23.23999977  1
00030710  2/24/2016  23.05999947   
00030710  2/25/2016  22.72999954   
00030710  2/26/2016  21.73999977   
00030710  2/29/2016  21.4326678   
00030710  2/24/2017  7.579999924   
00030710  2/27/2017  7.590000153  1
00030710  2/28/2017  9.170000076   
00030710  3/1/2017  8.909999847   
00030710  3/2/2017  8.909999847   
;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;So make a copy of the EVENTS and calculate the year ago date.&amp;nbsp; Use that older date as the DATE value, move the actual date and actual PRC to new variable names so you don't create conflicts later.&amp;nbsp; This step could be a VIEW instead of physical copy.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data year_ago / view=year_ago ;
  set have;
  where t=1 ;
  year_ago = intnx('year',date,-1,'s');
  format year_ago yymmdd10.;
  rename year_ago = date date=event_date prc=event_prc ;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Now INTERLEAVE this records with the original data.&amp;nbsp; Remember the values read from the last original observation.&amp;nbsp; Then when you hit one of these year ago dates output the result.&amp;nbsp; You probably should add a test to prevent getting a value from more than say 370 days ago.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want ;
  set have (drop=t in=in1) year_ago;
  by cusip date ;
  retain old_date old_prc ;
  if first.cusip then call missing(of old_date old_prc);
  if in1 then do;
    old_date = date;
    old_prc = prc ;
    format old_date yymmdd10.;
  end;
  if t=1 then do;
    days = event_date - old_date ;
    if (days &amp;gt; 370) then call missing(of old_date old_prc);
    output;
  end;
  drop date prc ;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Results&lt;/P&gt;
&lt;PRE&gt;                                  event_
Obs     CUSIP      event_date      prc      t      old_date    old_prc    days

 1     00030710    2016-02-23    23.2400    1    2015-02-23    32.1000     365
 2     00030710    2017-02-27     7.5900    1    2016-02-26    21.7400     367

&lt;/PRE&gt;</description>
      <pubDate>Wed, 22 Jun 2022 18:31:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Choosing-one-year-prior-same-day-or-end-day-or-their-closest-day/m-p/819786#M323576</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2022-06-22T18:31:01Z</dc:date>
    </item>
    <item>
      <title>Re: Choosing one-year prior 'same day' or 'end day' or their closest day if missing</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Choosing-one-year-prior-same-day-or-end-day-or-their-closest-day/m-p/820227#M323728</link>
      <description>&lt;P&gt;Thank you, Tom,&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Your code works way faster than I expected!&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The logic you are using is the one I was thinking. But I had a problem in creating workable codes. Yours are a bit over my head, but I will try to learn them.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I wish you a nice weekend!&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Sincerely,&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;KS -,&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 24 Jun 2022 12:37:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Choosing-one-year-prior-same-day-or-end-day-or-their-closest-day/m-p/820227#M323728</guid>
      <dc:creator>KS99</dc:creator>
      <dc:date>2022-06-24T12:37:09Z</dc:date>
    </item>
  </channel>
</rss>

