<?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: Conditional count (last 5 years observations) in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Conditional-count-last-5-years-observations/m-p/760216#M240369</link>
    <description>&lt;P&gt;If you search the SAS forums for &lt;EM&gt;rolling sum&lt;/EM&gt; or &lt;EM&gt;rolling count&lt;/EM&gt; you'll find quite a few similar Q&amp;amp;A.&lt;/P&gt;
&lt;P&gt;Below one coding option using your sample data.&lt;/P&gt;
&lt;P&gt;Depending on your actual data types and if year is just a number or a SAS date value some amendments to the posted code will be required.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  input Year Code $ EI_D;
  datalines;
2010 A 1
2011 A 0
2012 A 1
2013 A 1
2014 A 0
2015 A 1
2016 A 0
2017 A 0
2018 A 1
2014 B 1
2015 B 1
2016 B 0
2017 B 1
2018 B 0
;

proc sql;
  select distinct
    t1.*,
    case
      when count(*) &amp;gt;= 5 then sum(t2.EI_D)
      else .
      end as sum_ei_d
  from 
    have t1
    left join
    have t2
    on t1.code=t2.code and t2.year between t1.year-4 and t1.year
  group by 
    t1.code, t1.year
  order by
    t1.code, t1.year
  ;
quit;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Sun, 08 Aug 2021 08:34:43 GMT</pubDate>
    <dc:creator>Patrick</dc:creator>
    <dc:date>2021-08-08T08:34:43Z</dc:date>
    <item>
      <title>Conditional count (last 5 years observations)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Conditional-count-last-5-years-observations/m-p/760215#M240368</link>
      <description>&lt;P&gt;Hello everyone,&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'm trying to count a variable called "EI_D" that values 1 for last 5 years.&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here is my dataset.&amp;nbsp;&lt;/P&gt;&lt;P&gt;Year Code EI_D&lt;/P&gt;&lt;P&gt;2010&amp;nbsp; &amp;nbsp;A&amp;nbsp; &amp;nbsp; &amp;nbsp; 1&lt;/P&gt;&lt;P&gt;2011&amp;nbsp; &amp;nbsp;A&amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;/P&gt;&lt;P&gt;2012&amp;nbsp; &amp;nbsp;A&amp;nbsp; &amp;nbsp; &amp;nbsp; 1&lt;/P&gt;&lt;P&gt;2013&amp;nbsp; &amp;nbsp;A&amp;nbsp; &amp;nbsp; &amp;nbsp; 1&lt;/P&gt;&lt;P&gt;2014&amp;nbsp; &amp;nbsp;A&amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;/P&gt;&lt;P&gt;2015&amp;nbsp; &amp;nbsp;A&amp;nbsp; &amp;nbsp; &amp;nbsp; 1&lt;/P&gt;&lt;P&gt;2016&amp;nbsp; &amp;nbsp;A&amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;/P&gt;&lt;P&gt;2017&amp;nbsp; &amp;nbsp;A&amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;/P&gt;&lt;P&gt;2018&amp;nbsp; &amp;nbsp;A&amp;nbsp; &amp;nbsp; &amp;nbsp; 1&lt;/P&gt;&lt;P&gt;2014&amp;nbsp; &amp;nbsp;B&amp;nbsp; &amp;nbsp; &amp;nbsp;1&lt;/P&gt;&lt;P&gt;2015&amp;nbsp; &amp;nbsp;B&amp;nbsp; &amp;nbsp; &amp;nbsp;1&lt;/P&gt;&lt;P&gt;2016&amp;nbsp; &amp;nbsp;B&amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;/P&gt;&lt;P&gt;2017&amp;nbsp; &amp;nbsp;B&amp;nbsp; &amp;nbsp; &amp;nbsp;1&lt;/P&gt;&lt;P&gt;2018&amp;nbsp; &amp;nbsp;B&amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I want my dataset looking like below.&lt;/P&gt;&lt;P&gt;Year Code EI_D Count&lt;/P&gt;&lt;P&gt;2010&amp;nbsp; &amp;nbsp;A&amp;nbsp; &amp;nbsp; &amp;nbsp; 1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/P&gt;&lt;P&gt;2011&amp;nbsp; &amp;nbsp;A&amp;nbsp; &amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/P&gt;&lt;P&gt;2012&amp;nbsp; &amp;nbsp;A&amp;nbsp; &amp;nbsp; &amp;nbsp; 1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/P&gt;&lt;P&gt;2013&amp;nbsp; &amp;nbsp;A&amp;nbsp; &amp;nbsp; &amp;nbsp; 1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/P&gt;&lt;P&gt;2014&amp;nbsp; &amp;nbsp;A&amp;nbsp; &amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;3&lt;/P&gt;&lt;P&gt;2015&amp;nbsp; &amp;nbsp;A&amp;nbsp; &amp;nbsp; &amp;nbsp; 1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;3&amp;nbsp; &amp;nbsp;(Since I want to count EI_D that is 1 for last 5 years, I do not include 2010)&lt;/P&gt;&lt;P&gt;2016&amp;nbsp; &amp;nbsp;A&amp;nbsp; &amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;3&lt;/P&gt;&lt;P&gt;2017&amp;nbsp; &amp;nbsp;A&amp;nbsp; &amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2&lt;/P&gt;&lt;P&gt;2018&amp;nbsp; &amp;nbsp;A&amp;nbsp; &amp;nbsp; &amp;nbsp; 1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2&lt;/P&gt;&lt;P&gt;2014&amp;nbsp; &amp;nbsp;B&amp;nbsp; &amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;2015&amp;nbsp; &amp;nbsp;B&amp;nbsp; &amp;nbsp; &amp;nbsp;1&lt;/P&gt;&lt;P&gt;2016&amp;nbsp; &amp;nbsp;B&amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;/P&gt;&lt;P&gt;2017&amp;nbsp; &amp;nbsp;B&amp;nbsp; &amp;nbsp; &amp;nbsp;1&lt;/P&gt;&lt;P&gt;2018&amp;nbsp; &amp;nbsp;B&amp;nbsp; &amp;nbsp; &amp;nbsp;0&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;3&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I tried several types of PROC SQL code but they didn't work for me.&amp;nbsp;&lt;/P&gt;&lt;P&gt;I truly appreciate everyone's help...&lt;/P&gt;</description>
      <pubDate>Sun, 08 Aug 2021 08:04:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Conditional-count-last-5-years-observations/m-p/760215#M240368</guid>
      <dc:creator>ohsg94</dc:creator>
      <dc:date>2021-08-08T08:04:25Z</dc:date>
    </item>
    <item>
      <title>Re: Conditional count (last 5 years observations)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Conditional-count-last-5-years-observations/m-p/760216#M240369</link>
      <description>&lt;P&gt;If you search the SAS forums for &lt;EM&gt;rolling sum&lt;/EM&gt; or &lt;EM&gt;rolling count&lt;/EM&gt; you'll find quite a few similar Q&amp;amp;A.&lt;/P&gt;
&lt;P&gt;Below one coding option using your sample data.&lt;/P&gt;
&lt;P&gt;Depending on your actual data types and if year is just a number or a SAS date value some amendments to the posted code will be required.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  input Year Code $ EI_D;
  datalines;
2010 A 1
2011 A 0
2012 A 1
2013 A 1
2014 A 0
2015 A 1
2016 A 0
2017 A 0
2018 A 1
2014 B 1
2015 B 1
2016 B 0
2017 B 1
2018 B 0
;

proc sql;
  select distinct
    t1.*,
    case
      when count(*) &amp;gt;= 5 then sum(t2.EI_D)
      else .
      end as sum_ei_d
  from 
    have t1
    left join
    have t2
    on t1.code=t2.code and t2.year between t1.year-4 and t1.year
  group by 
    t1.code, t1.year
  order by
    t1.code, t1.year
  ;
quit;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sun, 08 Aug 2021 08:34:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Conditional-count-last-5-years-observations/m-p/760216#M240369</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2021-08-08T08:34:43Z</dc:date>
    </item>
    <item>
      <title>Re: Conditional count (last 5 years observations)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Conditional-count-last-5-years-observations/m-p/760226#M240373</link>
      <description>&lt;P&gt;If you have PROC EXPAND, then this is relatively easy, its called a moving sum of the 5 observations. You can use the MOVSUM 5 operator. An example (for moving average) can be found here: &lt;A href="https://documentation.sas.com/doc/en/etsug/15.2/etsug_expand_details19.htm#etsug_expand002903" target="_blank"&gt;https://documentation.sas.com/doc/en/etsug/15.2/etsug_expand_details19.htm#etsug_expand002903&lt;/A&gt; (scroll down)&lt;/P&gt;</description>
      <pubDate>Sun, 08 Aug 2021 10:50:46 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Conditional-count-last-5-years-observations/m-p/760226#M240373</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2021-08-08T10:50:46Z</dc:date>
    </item>
    <item>
      <title>Re: Conditional count (last 5 years observations)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Conditional-count-last-5-years-observations/m-p/760227#M240374</link>
      <description>&lt;P&gt;Rolling sum in a data step:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
set have;
by code year; /* year to assure correct sort order */
array y {0:4} _temporary_;
if first.code
then do;
  do i = 0 to 4; /* can be omitted, because we only calculate sums after the first 5 years */
    y{i} = 0;
  end;
  i = 1;
end;
else i + 1;
y{mod(_n_,5)} = ei_d;
if i ge 5 then count = sum(of y{*});
drop i;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Untested, posted from my tablet.&lt;/P&gt;</description>
      <pubDate>Sun, 08 Aug 2021 12:50:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Conditional-count-last-5-years-observations/m-p/760227#M240374</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2021-08-08T12:50:17Z</dc:date>
    </item>
    <item>
      <title>Re: Conditional count (last 5 years observations)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Conditional-count-last-5-years-observations/m-p/760229#M240375</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  input Year Code $ EI_D;
  datalines;
2010 A 1
2011 A 0
2012 A 1
2013 A 1
2014 A 0
2015 A 1
2016 A 0
2017 A 0
2018 A 1
2014 B 1
2015 B 1
2016 B 0
2017 B 1
2018 B 0
;

data want;
 if _n_=1 then do;
   if 0 then set have(rename=(EI_D=_EI_D));
   declare hash h(dataset:'have(rename=(EI_D=_EI_D))',hashexp:20);
   h.definekey('year','code');
   h.definedata('_EI_D');
   h.definedone();
 end;
set have;
 _n=0;count=0;
 do _year=year-4 to year;
  if h.find(key:_year,key:code)=0 then do;_n+1;count+_EI_D; end;
 end;
 if _n ne 5 then count=.;
 drop _n _year _EI_D;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sun, 08 Aug 2021 11:31:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Conditional-count-last-5-years-observations/m-p/760229#M240375</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2021-08-08T11:31:56Z</dc:date>
    </item>
    <item>
      <title>Re: Conditional count (last 5 years observations)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Conditional-count-last-5-years-observations/m-p/760232#M240377</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/18408"&gt;@Ksharp&lt;/a&gt;&amp;nbsp;Nice!&lt;/P&gt;</description>
      <pubDate>Sun, 08 Aug 2021 11:59:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Conditional-count-last-5-years-observations/m-p/760232#M240377</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2021-08-08T11:59:31Z</dc:date>
    </item>
    <item>
      <title>Re: Conditional count (last 5 years observations)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Conditional-count-last-5-years-observations/m-p/760250#M240380</link>
      <description>&lt;P&gt;You want rolling sums of EI_D for "windows" of size 5.&amp;nbsp; If you have exactly one record per year, and no holes, then:LAG is efficient:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
  set have;
  count=sum(lag4(ei_d),lag3(ei_d),lag2(ei_d),lag1(ei_d),ei_d);
  if lag4(code)^=code then count=.;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sun, 08 Aug 2021 16:38:58 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Conditional-count-last-5-years-observations/m-p/760250#M240380</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2021-08-08T16:38:58Z</dc:date>
    </item>
    <item>
      <title>Re: Conditional count (last 5 years observations)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Conditional-count-last-5-years-observations/m-p/761077#M240770</link>
      <description>I tried it and it worked for me. Thanks a lot.</description>
      <pubDate>Thu, 12 Aug 2021 07:37:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Conditional-count-last-5-years-observations/m-p/761077#M240770</guid>
      <dc:creator>ohsg94</dc:creator>
      <dc:date>2021-08-12T07:37:55Z</dc:date>
    </item>
    <item>
      <title>Re: Conditional count (last 5 years observations)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Conditional-count-last-5-years-observations/m-p/761078#M240771</link>
      <description>This worked for me. Thanks for your help.</description>
      <pubDate>Thu, 12 Aug 2021 07:40:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Conditional-count-last-5-years-observations/m-p/761078#M240771</guid>
      <dc:creator>ohsg94</dc:creator>
      <dc:date>2021-08-12T07:40:27Z</dc:date>
    </item>
  </channel>
</rss>

