<?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: rolling standard deviation separated by many categories in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/rolling-standard-deviation-separated-by-many-categories/m-p/320942#M70769</link>
    <description>&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/13879"&gt;@Reeza&lt;/a&gt;&lt;BR /&gt;&lt;BR /&gt;I prefer using PROC SQL, could you do me a great favor to modify the code?Also, you can use the others. Thanks.&lt;BR /&gt;</description>
    <pubDate>Fri, 23 Dec 2016 15:02:27 GMT</pubDate>
    <dc:creator>Jennifer925</dc:creator>
    <dc:date>2016-12-23T15:02:27Z</dc:date>
    <item>
      <title>rolling standard deviation separated by many categories</title>
      <link>https://communities.sas.com/t5/SAS-Programming/rolling-standard-deviation-separated-by-many-categories/m-p/320927#M70761</link>
      <description>&lt;P&gt;Hello all,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The ture data has many categories(mor than 400). I want the result to show the rolling 3years std by &amp;nbsp;treatment, but each treatment has different starting points. Now assuming two treatments, could you do me a great favor to get the result as follows(either one is fine)? Thanks a lot.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;infile cards dlm=',' truncover;&lt;/P&gt;&lt;P&gt;input treatment year x;&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;1,1980,0&lt;/P&gt;&lt;P&gt;1,1981,0&lt;/P&gt;&lt;P&gt;1,1982,0&lt;/P&gt;&lt;P&gt;1,1983,0&lt;/P&gt;&lt;P&gt;1,1984,5&lt;/P&gt;&lt;P&gt;1,1985,7&lt;/P&gt;&lt;P&gt;1,1986,0&lt;/P&gt;&lt;P&gt;1,1987,6&lt;/P&gt;&lt;P&gt;1,1988,2&lt;/P&gt;&lt;P&gt;1,1989,1&lt;/P&gt;&lt;P&gt;2,1980,0&lt;/P&gt;&lt;P&gt;2,1981,0&lt;/P&gt;&lt;P&gt;2,1982,0&lt;/P&gt;&lt;P&gt;2,1983,3&lt;/P&gt;&lt;P&gt;2,1984,4&lt;/P&gt;&lt;P&gt;2,1985,6&lt;/P&gt;&lt;P&gt;2,1986,0&lt;/P&gt;&lt;P&gt;2,1987,7&lt;/P&gt;&lt;P&gt;2,1988,3&lt;/P&gt;&lt;P&gt;2,1989,2&lt;/P&gt;&lt;P&gt;2,1990,1&lt;/P&gt;&lt;P&gt;2,1991,1;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color="#FF9900"&gt;I hope the result like this:&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;treatment&amp;nbsp;&amp;nbsp;&amp;nbsp; year&amp;nbsp;&amp;nbsp; x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; std3yr&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;1980&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;1981&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;1982&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;1983&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .&lt;/P&gt;&lt;P&gt;1&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1984&amp;nbsp; 5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;1985&amp;nbsp; 7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1986&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3.6055512755&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1987&amp;nbsp;&amp;nbsp; 6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3.7859388972&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1988&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3.0550504633&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1989&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2.6457513111&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;1980 &amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1981&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1982&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1983&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1984&amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1985&amp;nbsp;&amp;nbsp; 6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.5275252317&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1986&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3.0550504633&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1987&amp;nbsp;&amp;nbsp; 7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3.7859388972&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1988&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3.5118845843&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1989&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2.6457513111&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1990&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1991&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.5773502692&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Or&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;treatment&amp;nbsp;&amp;nbsp;&amp;nbsp; year&amp;nbsp;&amp;nbsp; x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; std3yr&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1986&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3.6055512755&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1987&amp;nbsp;&amp;nbsp; 6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3.7859388972&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1988&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3.0550504633&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1989&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2.6457513111&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1985&amp;nbsp;&amp;nbsp; 6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.5275252317&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1986&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3.0550504633&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1987&amp;nbsp;&amp;nbsp; 7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3.7859388972&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1988&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3.5118845843&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1989&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2.6457513111&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1990&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1991&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.5773502692&lt;/P&gt;</description>
      <pubDate>Fri, 23 Dec 2016 14:19:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/rolling-standard-deviation-separated-by-many-categories/m-p/320927#M70761</guid>
      <dc:creator>Jennifer925</dc:creator>
      <dc:date>2016-12-23T14:19:44Z</dc:date>
    </item>
    <item>
      <title>Re: rolling standard deviation separated by many categories</title>
      <link>https://communities.sas.com/t5/SAS-Programming/rolling-standard-deviation-separated-by-many-categories/m-p/320929#M70762</link>
      <description>&lt;P&gt;The solutions previously provide can be easily adapted with a BY statement. Which method did you choose to go with, rather than starting from scratch.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 23 Dec 2016 14:21:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/rolling-standard-deviation-separated-by-many-categories/m-p/320929#M70762</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2016-12-23T14:21:50Z</dc:date>
    </item>
    <item>
      <title>Re: rolling standard deviation separated by many categories</title>
      <link>https://communities.sas.com/t5/SAS-Programming/rolling-standard-deviation-separated-by-many-categories/m-p/320938#M70767</link>
      <description>&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/13879"&gt;@Reeza&lt;/a&gt;&lt;BR /&gt;&lt;BR /&gt;I have tried by statement, but the result is messy.</description>
      <pubDate>Fri, 23 Dec 2016 14:52:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/rolling-standard-deviation-separated-by-many-categories/m-p/320938#M70767</guid>
      <dc:creator>Jennifer925</dc:creator>
      <dc:date>2016-12-23T14:52:38Z</dc:date>
    </item>
    <item>
      <title>Re: rolling standard deviation separated by many categories</title>
      <link>https://communities.sas.com/t5/SAS-Programming/rolling-standard-deviation-separated-by-many-categories/m-p/320941#M70768</link>
      <description>&lt;P&gt;You posted this question for a single category earlier. Several solutions were provided. Which one did you want to work with? If you post that we can help modify it for multiple groups.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Rather than revisit every possible solution, it's better to start with something you have and understand.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 23 Dec 2016 14:57:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/rolling-standard-deviation-separated-by-many-categories/m-p/320941#M70768</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2016-12-23T14:57:14Z</dc:date>
    </item>
    <item>
      <title>Re: rolling standard deviation separated by many categories</title>
      <link>https://communities.sas.com/t5/SAS-Programming/rolling-standard-deviation-separated-by-many-categories/m-p/320942#M70769</link>
      <description>&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/13879"&gt;@Reeza&lt;/a&gt;&lt;BR /&gt;&lt;BR /&gt;I prefer using PROC SQL, could you do me a great favor to modify the code?Also, you can use the others. Thanks.&lt;BR /&gt;</description>
      <pubDate>Fri, 23 Dec 2016 15:02:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/rolling-standard-deviation-separated-by-many-categories/m-p/320942#M70769</guid>
      <dc:creator>Jennifer925</dc:creator>
      <dc:date>2016-12-23T15:02:27Z</dc:date>
    </item>
    <item>
      <title>Re: rolling standard deviation separated by many categories</title>
      <link>https://communities.sas.com/t5/SAS-Programming/rolling-standard-deviation-separated-by-many-categories/m-p/320959#M70775</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/120563"&gt;@Jennifer925&lt;/a&gt; wrote:&lt;BR /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The ture data has many categories(mor than 400). I want the result to show the rolling 3years std by &amp;nbsp;treatment, but each treatment has different starting points. Now assuming two treatments, could you do me a great favor to get the result as follows(either one is fine)? Thanks a lot.&lt;/P&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Are the 400 categories levels of the treatment variable?&lt;/P&gt;
&lt;P&gt;Do you have, or can you make, a dataset with the "different starting point" for each treatment.&lt;/P&gt;
&lt;P&gt;For example it looks like you might have&lt;BR /&gt;Treatment&amp;nbsp;&amp;nbsp;&amp;nbsp; Startyear&lt;/P&gt;
&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1986&lt;/P&gt;
&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1985&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If so then then you could combine the rule data with the actual data by treatment, and only calculate the value for years greater than or equal to the start year.&lt;/P&gt;</description>
      <pubDate>Fri, 23 Dec 2016 16:05:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/rolling-standard-deviation-separated-by-many-categories/m-p/320959#M70775</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2016-12-23T16:05:23Z</dc:date>
    </item>
    <item>
      <title>Re: rolling standard deviation separated by many categories</title>
      <link>https://communities.sas.com/t5/SAS-Programming/rolling-standard-deviation-separated-by-many-categories/m-p/320980#M70786</link>
      <description>&lt;P&gt;I couldn't think of a way to identify the starting records in SQL while also including 0's in the data.&lt;/P&gt;
&lt;P&gt;SQL doesn't have a concept of rows that allows counting, unless you use Cursor logic, which isn't available in SAS.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I'm sure there's a way, but its probably cumbersome...and more code than I'm willing to write at the moment.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here's a data step solution, that's relatively straightforward.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile cards dlm=',' truncover;
input treatment year x;
cards;
1,1980,0
1,1981,0
1,1982,0
1,1983,0
1,1984,5
1,1985,7
1,1986,0
1,1987,6
1,1988,2
1,1989,1
2,1980,0
2,1981,0
2,1982,0
2,1983,3
2,1984,4
2,1985,6
2,1986,0
2,1987,7
2,1988,3
2,1989,2
2,1990,1
2,1991,1
;
run;

data want1;
/*Set temporary array to store the last 3 records*/
array p{0:2} _temporary_;

set have; 
by treatment; /*BY GROUP PROCESSING*/

retain count;/*Keep value of count from row to row*/

p{mod(_n_,3)} = x; /*Assign value to the array for calculations*/

/*If first treatment record then reset 
the array to missing and set the counter to 0*/
if first.treatment then do;
    call missing (of p(*));
    count=0;
end;

/*Increment Counter if the value if starting record is found*/
if x ne 0 or count&amp;gt;0 then count+1;

/*Calculate STDEV*/
if nmiss(of p(*)) = 0 and max(of p(*)) ne 0 and count&amp;gt;= 3 
    then stdev = std(of p{*});

run;


proc print data=want1; run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 23 Dec 2016 18:19:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/rolling-standard-deviation-separated-by-many-categories/m-p/320980#M70786</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2016-12-23T18:19:44Z</dc:date>
    </item>
    <item>
      <title>Re: rolling standard deviation separated by many categories</title>
      <link>https://communities.sas.com/t5/SAS-Programming/rolling-standard-deviation-separated-by-many-categories/m-p/320986#M70787</link>
      <description>&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/13884"&gt;@ballardw&lt;/a&gt;&lt;BR /&gt;yes, 400 categories are the level of the treatment.&lt;BR /&gt;</description>
      <pubDate>Fri, 23 Dec 2016 18:42:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/rolling-standard-deviation-separated-by-many-categories/m-p/320986#M70787</guid>
      <dc:creator>Jennifer925</dc:creator>
      <dc:date>2016-12-23T18:42:03Z</dc:date>
    </item>
    <item>
      <title>Re: rolling standard deviation separated by many categories</title>
      <link>https://communities.sas.com/t5/SAS-Programming/rolling-standard-deviation-separated-by-many-categories/m-p/321010#M70795</link>
      <description>&lt;P&gt;Jennifer:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This is the same problem you submitted earlier, but with treatment as a by-group.&amp;nbsp;&amp;nbsp;Think about the logic of the single treatment solution that you accepted:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#000080" face="Sasfont"&gt;&lt;STRONG&gt;data&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT face="Sasfont"&gt; want (&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Sasfont"&gt;drop&lt;/FONT&gt;&lt;FONT face="Sasfont"&gt;=n_nonzeroes);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#0000ff" face="Sasfont"&gt;&amp;nbsp; set&lt;/FONT&gt;&lt;FONT face="Sasfont"&gt; have;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Sasfont"&gt;&amp;nbsp;&amp;nbsp; n_nonzeroes+(x^=&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Sasfont"&gt;0&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Sasfont"&gt;); &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#0000ff" face="Sasfont"&gt;&amp;nbsp; if&lt;/FONT&gt;&lt;FONT face="Sasfont"&gt; n_nonzeroes=&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Sasfont"&gt;0&lt;/FONT&gt;&lt;/STRONG&gt; &lt;FONT color="#0000ff" face="Sasfont"&gt;then&lt;/FONT&gt; &lt;FONT color="#0000ff" face="Sasfont"&gt;delete&lt;/FONT&gt;&lt;FONT face="Sasfont"&gt;; &lt;/FONT&gt;&lt;FONT color="#008000" face="Sasfont"&gt;/* No input for std until first non-zero record*/&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#008000" face="Sasfont"&gt;&lt;FONT color="#008000" face="Courier New"&gt;&amp;nbsp; std3yr=std(x,lag(x),lag2(x));&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#0000ff" face="Sasfont"&gt;&amp;nbsp; if&lt;/FONT&gt;&lt;FONT face="Sasfont"&gt; lag2(n_nonzeroes)&amp;gt;&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Sasfont"&gt;0&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Sasfont"&gt;; &lt;/FONT&gt;&lt;FONT color="#008000" face="Sasfont"&gt;/* No output until 2nd record following first non-zero*/&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#000080" face="Sasfont"&gt;&lt;STRONG&gt;run&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT face="Sasfont"&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;All you have to do is&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Reset n_nonzeroes to 0 at the beginning of each BY group - a perfectly ordinary technique of SAS by-group programming.&lt;/LI&gt;
&lt;LI&gt;And change the LAG2 test to include a&amp;nbsp;test for same treatment.&amp;nbsp; The latter is neccessary because otherwise the "lag2(n_nonzeroes)&amp;gt;0" test for a given treatment could be contaminated by results from the prior treatment.&lt;BR /&gt;&lt;BR /&gt;The &lt;EM&gt;&lt;STRONG&gt;bold-italics&lt;/STRONG&gt;&lt;/EM&gt; below show the changes:&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#000080" face="Sasfont"&gt;&lt;STRONG&gt;data&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT face="Sasfont"&gt; want (&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Sasfont"&gt;drop&lt;/FONT&gt;&lt;FONT face="Sasfont"&gt;=n_nonzeroes);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#0000ff" face="Sasfont"&gt;&amp;nbsp; set&lt;/FONT&gt;&lt;FONT face="Sasfont"&gt; have;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;&lt;FONT color="#0000ff" face="Sasfont"&gt;&amp;nbsp; by&lt;/FONT&gt;&lt;FONT face="Sasfont"&gt; treatment;&lt;/FONT&gt;&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;&lt;FONT color="#0000ff" face="Sasfont"&gt;&amp;nbsp; if&lt;/FONT&gt;&lt;FONT face="Sasfont"&gt; first.treatment=&lt;/FONT&gt;&lt;FONT color="#008080" face="Sasfont"&gt;1&lt;/FONT&gt; &lt;FONT color="#0000ff" face="Sasfont"&gt;then&lt;/FONT&gt;&lt;FONT face="Sasfont"&gt; n_nonzeroes=&lt;/FONT&gt;&lt;FONT color="#008080" face="Sasfont"&gt;0&lt;/FONT&gt;&lt;FONT face="Sasfont"&gt;;&lt;/FONT&gt;&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Sasfont"&gt;&amp;nbsp;&amp;nbsp;n_nonzeroes+(x^=&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Sasfont"&gt;0&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Sasfont"&gt;); &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#0000ff" face="Sasfont"&gt;&amp;nbsp; if&lt;/FONT&gt;&lt;FONT face="Sasfont"&gt; n_nonzeroes=&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Sasfont"&gt;0&lt;/FONT&gt;&lt;/STRONG&gt; &lt;FONT color="#0000ff" face="Sasfont"&gt;then&lt;/FONT&gt; &lt;FONT color="#0000ff" face="Sasfont"&gt;delete&lt;/FONT&gt;&lt;FONT face="Sasfont"&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#008000" face="Courier New"&gt;&amp;nbsp; std3yr=std(x,lag(x),lag2(x));&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#0000ff" face="Sasfont"&gt;&amp;nbsp; if&lt;/FONT&gt;&lt;FONT face="Sasfont"&gt; lag2(n_nonzeroes)&amp;gt;&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Sasfont"&gt;0&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Sasfont"&gt;&lt;STRONG&gt;&lt;EM&gt; and lag2(treatment)=treatment&lt;/EM&gt; &lt;/STRONG&gt;; &lt;/FONT&gt;&lt;FONT color="#008000" face="Sasfont"&gt;/* No output until 2nd record following first non-zero */&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#000080" face="Sasfont"&gt;&lt;STRONG&gt;run&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT face="Sasfont"&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I notice that unlike your original question, your WANT sample&amp;nbsp;now includes&amp;nbsp;the&amp;nbsp;records with leading zeroes in each by group. That actually makes the program a bit more compact, since there are no subsetting IF's or DELETE statements.:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#000080" face="Sasfont"&gt;&lt;STRONG&gt;data&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT face="Sasfont"&gt; want2 (&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Sasfont"&gt;drop&lt;/FONT&gt;&lt;FONT face="Sasfont"&gt;=n_nonzeroes);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#0000ff" face="Sasfont"&gt;&amp;nbsp; set&lt;/FONT&gt;&lt;FONT face="Sasfont"&gt; have;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#0000ff" face="Sasfont"&gt;&amp;nbsp; by&lt;/FONT&gt;&lt;FONT face="Sasfont"&gt; treatment;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#0000ff" face="Sasfont"&gt;&amp;nbsp; if&lt;/FONT&gt;&lt;FONT face="Sasfont"&gt; first.treatment=&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Sasfont"&gt;1&lt;/FONT&gt;&lt;/STRONG&gt; &lt;FONT color="#0000ff" face="Sasfont"&gt;then&lt;/FONT&gt;&lt;FONT face="Sasfont"&gt; n_nonzeroes=&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Sasfont"&gt;0&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Sasfont"&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Sasfont"&gt;&amp;nbsp;&amp;nbsp;n_nonzeroes+(x^=&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Sasfont"&gt;0&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Sasfont"&gt;);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Sasfont"&gt;&amp;nbsp;&amp;nbsp;std3yr=ifn(lag2(n_nonzeroes)&amp;gt;&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Sasfont"&gt;0&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Sasfont"&gt;&amp;nbsp;and lag2(treatment)=treatment&lt;/FONT&gt;&lt;FONT face="Sasfont"&gt;,std(x,lag(x),lag2(x))&lt;/FONT&gt;&lt;FONT face="Sasfont"&gt;,&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Sasfont"&gt;.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Sasfont"&gt;);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#000080" face="Sasfont"&gt;&lt;STRONG&gt;run&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT face="Sasfont"&gt;;&lt;/FONT&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 23 Dec 2016 23:02:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/rolling-standard-deviation-separated-by-many-categories/m-p/321010#M70795</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2016-12-23T23:02:22Z</dc:date>
    </item>
    <item>
      <title>Re: rolling standard deviation separated by many categories</title>
      <link>https://communities.sas.com/t5/SAS-Programming/rolling-standard-deviation-separated-by-many-categories/m-p/321022#M70799</link>
      <description>&lt;PRE&gt;

 
data have;
infile cards dlm=',' truncover;
input treatment year x;
cards;
1,1980,0
1,1981,0
1,1982,0
1,1983,0
1,1984,5
1,1985,7
1,1986,0
1,1987,6
1,1988,2
1,1989,1
2,1980,0
2,1981,0
2,1982,0
2,1983,3
2,1984,4
2,1985,6
2,1986,0
2,1987,7
2,1988,3
2,1989,2
2,1990,1
2,1991,1
;
run;
data want;
 set have;
 by treatment;
 retain found ;
 lag_x=lag(x);
 lag2_x=lag2(x);
 if first.treatment then do;found=0;count=0;end;
 if x ne 0 then found=1;
 if found then count+1;
 if count ge 3 then std3=std(x,lag_x,lag2_x);
 drop lag:;
run;

&lt;/PRE&gt;</description>
      <pubDate>Sat, 24 Dec 2016 04:26:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/rolling-standard-deviation-separated-by-many-categories/m-p/321022#M70799</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2016-12-24T04:26:26Z</dc:date>
    </item>
  </channel>
</rss>

