<?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: selective summation in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/selective-summation/m-p/808005#M318597</link>
    <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
data have;
input ID	val_202001	val_202002	val_202003	val_202004	val_202005	val_202006	val_202007	val_202008	val_202009	val_202010	val_202011	val_202012	val_202101	val_202102	val_202103 ;
cards;
1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1
2	1	1	0	0	1	1	1	1	1	1	1	1	1	1	1
3	0	0	0	0	0	0	0	0	0	0	1	1	1	1	1
;

data want;
  set have;
  array t(*) val_: ;
  want = dim(t) - findc(cats(of t(*)),'0','b');
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Fri, 15 Apr 2022 14:04:47 GMT</pubDate>
    <dc:creator>novinosrin</dc:creator>
    <dc:date>2022-04-15T14:04:47Z</dc:date>
    <item>
      <title>selective summation</title>
      <link>https://communities.sas.com/t5/SAS-Programming/selective-summation/m-p/807999#M318593</link>
      <description>&lt;P&gt;&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;I want to sum 1s for a given key, but only the last ones, if there was a gap, i.e. there was 0, I do not want to sum.&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;SPAN class=""&gt;&lt;SPAN class=""&gt;example below:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;val_202001&lt;/TD&gt;&lt;TD&gt;val_202002&lt;/TD&gt;&lt;TD&gt;val_202003&lt;/TD&gt;&lt;TD&gt;val_202004&lt;/TD&gt;&lt;TD&gt;val_202005&lt;/TD&gt;&lt;TD&gt;val_202006&lt;/TD&gt;&lt;TD&gt;val_202007&lt;/TD&gt;&lt;TD&gt;val_202008&lt;/TD&gt;&lt;TD&gt;val_202009&lt;/TD&gt;&lt;TD&gt;val_202010&lt;/TD&gt;&lt;TD&gt;val_202011&lt;/TD&gt;&lt;TD&gt;val_202012&lt;/TD&gt;&lt;TD&gt;val_202101&lt;/TD&gt;&lt;TD&gt;val_202102&lt;/TD&gt;&lt;TD&gt;val_202103&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;expected&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;15&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#99CC00"&gt;1&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#99CC00"&gt;1&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#99CC00"&gt;1&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#99CC00"&gt;1&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#99CC00"&gt;1&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#99CC00"&gt;1&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#99CC00"&gt;1&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#99CC00"&gt;1&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#99CC00"&gt;1&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#99CC00"&gt;1&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#99CC00"&gt;1&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;11&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;Thanks for your help / inspiration&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 15 Apr 2022 13:42:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/selective-summation/m-p/807999#M318593</guid>
      <dc:creator>PITERSON_X_TB</dc:creator>
      <dc:date>2022-04-15T13:42:21Z</dc:date>
    </item>
    <item>
      <title>Re: selective summation</title>
      <link>https://communities.sas.com/t5/SAS-Programming/selective-summation/m-p/808003#M318595</link>
      <description>&lt;P&gt;UNTESTED CODE&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
    set have;
    array x val_202001--val_202103;
    expected=0;
    do i=dim(x) to 1 by -1;
         if x(i)=1 then expected=expected+1;
         else if x(i)=0 then leave;
    end;
    drop i;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you want tested code, please provide (a portion of) the data as SAS data step code, which you can type in yourself, or create it via &lt;A href="https://blogs.sas.com/content/sastraining/2016/03/11/jedi-sas-tricks-data-to-data-step-macro/" target="_self"&gt;these instructions&lt;/A&gt;.&lt;/P&gt;</description>
      <pubDate>Fri, 15 Apr 2022 14:00:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/selective-summation/m-p/808003#M318595</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2022-04-15T14:00:25Z</dc:date>
    </item>
    <item>
      <title>Re: selective summation</title>
      <link>https://communities.sas.com/t5/SAS-Programming/selective-summation/m-p/808004#M318596</link>
      <description>&lt;P&gt;Do not keep data in structure, it makes working with it more complicated.&lt;/P&gt;
&lt;P&gt;So first, transpose:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc transpose data=have out=long (rename=(_name_=period col1=value));
by id;
var val:;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Then it is easy:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
set long;
by id;
if first.id or value = 0
then expected = 0;
else expected + 1;
if last.id;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 15 Apr 2022 13:59:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/selective-summation/m-p/808004#M318596</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2022-04-15T13:59:36Z</dc:date>
    </item>
    <item>
      <title>Re: selective summation</title>
      <link>https://communities.sas.com/t5/SAS-Programming/selective-summation/m-p/808005#M318597</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
data have;
input ID	val_202001	val_202002	val_202003	val_202004	val_202005	val_202006	val_202007	val_202008	val_202009	val_202010	val_202011	val_202012	val_202101	val_202102	val_202103 ;
cards;
1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1
2	1	1	0	0	1	1	1	1	1	1	1	1	1	1	1
3	0	0	0	0	0	0	0	0	0	0	1	1	1	1	1
;

data want;
  set have;
  array t(*) val_: ;
  want = dim(t) - findc(cats(of t(*)),'0','b');
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 15 Apr 2022 14:04:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/selective-summation/m-p/808005#M318597</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2022-04-15T14:04:47Z</dc:date>
    </item>
    <item>
      <title>Re: selective summation</title>
      <link>https://communities.sas.com/t5/SAS-Programming/selective-summation/m-p/808013#M318602</link>
      <description>Not nearly as intuitive as the previous solutions, but very pithy.</description>
      <pubDate>Fri, 15 Apr 2022 14:46:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/selective-summation/m-p/808013#M318602</guid>
      <dc:creator>average_joe</dc:creator>
      <dc:date>2022-04-15T14:46:05Z</dc:date>
    </item>
    <item>
      <title>Re: selective summation</title>
      <link>https://communities.sas.com/t5/SAS-Programming/selective-summation/m-p/808030#M318610</link>
      <description>&lt;P&gt;Thank you&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/345100"&gt;@average_joe&lt;/a&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 15 Apr 2022 15:39:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/selective-summation/m-p/808030#M318610</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2022-04-15T15:39:54Z</dc:date>
    </item>
    <item>
      <title>Re: selective summation</title>
      <link>https://communities.sas.com/t5/SAS-Programming/selective-summation/m-p/808081#M318632</link>
      <description>&lt;P&gt;Could your series end with 0?&amp;nbsp; Could there be multiple groups, not just 1 or 2?&amp;nbsp; What should the result look like for these series of values?&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;1	1	0	0	1	1	1	1	1	1	1	1	1	0	1
1	1	0	0	1	1	1	1	1	1	1	1	1	0	0&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 15 Apr 2022 19:03:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/selective-summation/m-p/808081#M318632</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2022-04-15T19:03:54Z</dc:date>
    </item>
    <item>
      <title>Re: selective summation</title>
      <link>https://communities.sas.com/t5/SAS-Programming/selective-summation/m-p/808086#M318637</link>
      <description>&lt;P&gt;&amp;nbsp;Sir&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/4954"&gt;@Astounding&lt;/a&gt;&amp;nbsp; Nice one. Indeed a certain possibility that expects the logic to pick just the &lt;STRONG&gt;&lt;EM&gt;right most&lt;/EM&gt;&lt;/STRONG&gt; set of 1's if it were to exist -&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
data have;
input ID	val_202001	val_202002	val_202003	val_202004	val_202005	val_202006	val_202007	val_202008	val_202009	val_202010	val_202011	val_202012	val_202101	val_202102	val_202103 ;
cards;
1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1
2	1	1	0	0	1	1	1	1	1	1	1	1	1	1	1
3	0	0	0	0	0	0	0	0	0	0	1	1	1	1	1
4   1	1	0	0	1	1	1	1	1	1	1	1	1	0	1
5   1	1	0	0	1	1	1	1	1	1	1	1	1	0	0
6   0	0	0	0	0 	0 	0	0	0	0	0	0	0	0	0
;

data want;
  set have;
  array t(*) val_: ;
  want = lengthn(scan(cats(of t(*)),-1,'1','k'));
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 15 Apr 2022 19:47:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/selective-summation/m-p/808086#M318637</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2022-04-15T19:47:50Z</dc:date>
    </item>
    <item>
      <title>Re: selective summation</title>
      <link>https://communities.sas.com/t5/SAS-Programming/selective-summation/m-p/808162#M318657</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input ID	val_202001	val_202002	val_202003	val_202004	val_202005	val_202006	val_202007	val_202008	val_202009	val_202010	val_202011	val_202012	val_202101	val_202102	val_202103 ;
cards;
1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1
2	1	1	0	0	1	1	1	1	1	1	1	1	1	1	1
3	0	0	0	0	0	0	0	0	0	0	1	1	1	1	1
4   1	1	0	0	1	1	1	1	1	1	1	1	1	0	1
5   1	1	0	0	1	1	1	1	1	1	1	1	1	0	0
6   0	0	0	0	0 	0 	0	0	0	0	0	0	0	0	0
;

data want;
  set have;
temp=cats(of val_:);
pid=prxparse('/1+/');
s=1;e=length(temp);
call prxnext(pid,s,e,temp,p,l);
do while(p&amp;gt;0);
 want=l;
 call prxnext(pid,s,e,temp,p,l);
end;
drop temp pid s e p l;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sat, 16 Apr 2022 11:09:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/selective-summation/m-p/808162#M318657</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2022-04-16T11:09:56Z</dc:date>
    </item>
  </channel>
</rss>

