<?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: Count conditional on continuous value being above a number in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Count-conditional-on-continuous-value-being-above-a-number/m-p/606396#M176086</link>
    <description>&lt;P&gt;This solution assumes the time data is continuous, i.e. each record is separated from the next by 1 second only.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;You can use the retain statement to get the incremental counts of speeds above (and, apparently, also equal) to 42 and 55.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
	input date_time speed;
	informat date_time datetime16.;
	format date_time datetime16.;
	cards;
11DEC16:23:53:21 35.00
11DEC16:23:53:22 39.00
11DEC16:23:53:23 45.00
11DEC16:23:53:24 55.00
11DEC16:23:53:25 56.00
11DEC16:23:53:26 58.00
11DEC16:23:53:27 56.00
11DEC16:23:53:28 55.00
11DEC16:23:53:29 50.00
11DEC16:23:53:30 40.00
11DEC16:23:53:31 53.00
11DEC16:23:53:32 55.00
11DEC16:23:53:33 56.00
11DEC16:23:53:34 58.00
;
run;

proc sort data=have out=have_sorted;
	by date_time;
run;

data want;
	set have_sorted;
	by date_time;

	retain above_42 above_55;

	if speed &amp;gt;= 42 then do;
		above_42 + 1;

		if speed &amp;gt;= 55 then above_55 + 1;
		else above_55 = 0;
	end;
	else above_42 = 0;

	if missing(above_42) then above_42 = 0;
	if missing(above_55) then above_55 = 0;
run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="20191122_1.PNG" style="width: 400px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/34156i7E8E3EA65BFF73F6/image-size/large?v=v2&amp;amp;px=999" role="button" title="20191122_1.PNG" alt="20191122_1.PNG" /&gt;&lt;/span&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;And if you wanted the final counts for each number of sustained seconds:&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;/* Group runs for sustained counts  */
data groupings;
	set want;
	by date_time;

	retain group_42 group_55;
	if _n_ = 1 then do;
		group_42 = 1;
		group_55 = 1;
	end;
	else do;
		if above_42 = 0 then group_42 + 1;
		if above_55 = 0 then group_55 + 1;
	end;
run;

proc sql noprint;
	create table sustained_42 as
		select distinct seconds, count(distinct group_42) as count_42
		from (select distinct max(above_42) as seconds, group_42
			  from groupings
			  where above_42 ^= 0
			  group by group_42)
		group by seconds
		order by seconds
	;
	create table sustained_55 as
		select distinct seconds, count(distinct group_55) as count_55
		from (select distinct max(above_55) as seconds, group_55
			  from groupings
			  where above_55 ^= 0
			  group by group_55)
		group by seconds
		order by seconds
	;
quit;

data perfect;
	do seconds = 1 to 10;
		output;
	end;
run;

data want_final;
	merge perfect sustained_42 sustained_55;
	by seconds;

	array counts count_42 count_55;
	do over counts;
		if missing(counts) then counts = 0;
	end;
run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;CODE class=" language-sas"&gt;&amp;nbsp;&lt;/CODE&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="20191122_2.PNG" style="width: 308px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/34157i779F1CB6FE5B5BF4/image-size/large?v=v2&amp;amp;px=999" role="button" title="20191122_2.PNG" alt="20191122_2.PNG" /&gt;&lt;/span&gt;&lt;/P&gt;</description>
    <pubDate>Fri, 22 Nov 2019 09:14:18 GMT</pubDate>
    <dc:creator>jvdl</dc:creator>
    <dc:date>2019-11-22T09:14:18Z</dc:date>
    <item>
      <title>Count conditional on continuous value being above a number</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Count-conditional-on-continuous-value-being-above-a-number/m-p/606353#M176065</link>
      <description>&lt;P&gt;I have a time series of values (e.g. speed of a car) and I want to understand the number of times that value exceeds a number for certain durations (e.g. "exceeded 55mph for more than 8 seconds" occurred 5 times during this 10 hour trip.&amp;nbsp; &amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;In excel I created a column that started counting when the value was above 55, and then reset to 0 when it fell below again.&amp;nbsp; I created a&amp;nbsp; second column that took the difference of the prior row and current row of that first calculated count column, which gave the highest number in each series plus a bunch of -1 values.&amp;nbsp; Ignoring the -1 and 0 values, I can then get my desired count.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The full data set is too large for excel and i would prefer to run this in SAS, and in a data step, though Proc SQL is good also.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The excel method works, but I am stumped on how to get that first counting column that resets to zero when the continuous variable falls below the threshold.&amp;nbsp; I don't think first. and last. would work, but maybe with an if/then statement?&amp;nbsp; I am not sure how to reset an if/then count.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Assuming the excel method is a good path, how do I get that first counting column?&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;raw data example&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;date_time&lt;/TD&gt;&lt;TD&gt;speed&lt;/TD&gt;&lt;TD&gt;Count above 55&lt;/TD&gt;&lt;TD&gt;count above 42&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;11DEC16:23:53:21&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 35.00&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;11DEC16:23:53:22&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 39.00&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;11DEC16:23:53:23&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 45.00&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;11DEC16:23:53:24&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 55.00&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;11DEC16:23:53:25&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 56.00&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;11DEC16:23:53:26&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 58.00&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;11DEC16:23:53:27&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 56.00&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;11DEC16:23:53:28&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 55.00&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;11DEC16:23:53:29&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 50.00&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;11DEC16:23:53:30&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 40.00&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;11DEC16:23:53:31&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 53.00&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;11DEC16:23:53:32&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 55.00&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;11DEC16:23:53:33&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 56.00&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;11DEC16:23:53:34&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 58.00&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;the final product would look like:&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Number of times above55, sustained for xx seconds&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;xx&lt;/TD&gt;&lt;TD&gt;counts&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10&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;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Number of times above 42, sustained for xx seconds&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;xx&lt;/TD&gt;&lt;TD&gt;counts&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10&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;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 22 Nov 2019 01:14:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Count-conditional-on-continuous-value-being-above-a-number/m-p/606353#M176065</guid>
      <dc:creator>yelkenli</dc:creator>
      <dc:date>2019-11-22T01:14:44Z</dc:date>
    </item>
    <item>
      <title>Re: Count conditional on continuous value being above a number</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Count-conditional-on-continuous-value-being-above-a-number/m-p/606396#M176086</link>
      <description>&lt;P&gt;This solution assumes the time data is continuous, i.e. each record is separated from the next by 1 second only.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;You can use the retain statement to get the incremental counts of speeds above (and, apparently, also equal) to 42 and 55.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
	input date_time speed;
	informat date_time datetime16.;
	format date_time datetime16.;
	cards;
11DEC16:23:53:21 35.00
11DEC16:23:53:22 39.00
11DEC16:23:53:23 45.00
11DEC16:23:53:24 55.00
11DEC16:23:53:25 56.00
11DEC16:23:53:26 58.00
11DEC16:23:53:27 56.00
11DEC16:23:53:28 55.00
11DEC16:23:53:29 50.00
11DEC16:23:53:30 40.00
11DEC16:23:53:31 53.00
11DEC16:23:53:32 55.00
11DEC16:23:53:33 56.00
11DEC16:23:53:34 58.00
;
run;

proc sort data=have out=have_sorted;
	by date_time;
run;

data want;
	set have_sorted;
	by date_time;

	retain above_42 above_55;

	if speed &amp;gt;= 42 then do;
		above_42 + 1;

		if speed &amp;gt;= 55 then above_55 + 1;
		else above_55 = 0;
	end;
	else above_42 = 0;

	if missing(above_42) then above_42 = 0;
	if missing(above_55) then above_55 = 0;
run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="20191122_1.PNG" style="width: 400px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/34156i7E8E3EA65BFF73F6/image-size/large?v=v2&amp;amp;px=999" role="button" title="20191122_1.PNG" alt="20191122_1.PNG" /&gt;&lt;/span&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;And if you wanted the final counts for each number of sustained seconds:&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;/* Group runs for sustained counts  */
data groupings;
	set want;
	by date_time;

	retain group_42 group_55;
	if _n_ = 1 then do;
		group_42 = 1;
		group_55 = 1;
	end;
	else do;
		if above_42 = 0 then group_42 + 1;
		if above_55 = 0 then group_55 + 1;
	end;
run;

proc sql noprint;
	create table sustained_42 as
		select distinct seconds, count(distinct group_42) as count_42
		from (select distinct max(above_42) as seconds, group_42
			  from groupings
			  where above_42 ^= 0
			  group by group_42)
		group by seconds
		order by seconds
	;
	create table sustained_55 as
		select distinct seconds, count(distinct group_55) as count_55
		from (select distinct max(above_55) as seconds, group_55
			  from groupings
			  where above_55 ^= 0
			  group by group_55)
		group by seconds
		order by seconds
	;
quit;

data perfect;
	do seconds = 1 to 10;
		output;
	end;
run;

data want_final;
	merge perfect sustained_42 sustained_55;
	by seconds;

	array counts count_42 count_55;
	do over counts;
		if missing(counts) then counts = 0;
	end;
run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;CODE class=" language-sas"&gt;&amp;nbsp;&lt;/CODE&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="20191122_2.PNG" style="width: 308px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/34157i779F1CB6FE5B5BF4/image-size/large?v=v2&amp;amp;px=999" role="button" title="20191122_2.PNG" alt="20191122_2.PNG" /&gt;&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 22 Nov 2019 09:14:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Count-conditional-on-continuous-value-being-above-a-number/m-p/606396#M176086</guid>
      <dc:creator>jvdl</dc:creator>
      <dc:date>2019-11-22T09:14:18Z</dc:date>
    </item>
    <item>
      <title>Re: Count conditional on continuous value being above a number</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Count-conditional-on-continuous-value-being-above-a-number/m-p/606536#M176139</link>
      <description>&lt;P&gt;I would propose to start with:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data speed;
input dt :datetime. speed;
format dt datetime.;
datalines;
11DEC16:23:53:21             35.00
11DEC16:23:53:22             39.00
11DEC16:23:53:23             45.00
11DEC16:23:53:24             55.00
11DEC16:23:53:25             56.00
11DEC16:23:53:26             58.00
11DEC16:23:53:27             56.00
11DEC16:23:53:28             55.00
11DEC16:23:53:29             50.00
11DEC16:23:53:30             40.00
11DEC16:23:53:31             53.00
11DEC16:23:53:32             55.00
11DEC16:23:53:33             56.00
11DEC16:23:53:34             58.00
;

data want;
array above{2} _temporary_ (42, 55);
array start{2} _temporary_;
array stop{2} _temporary_;
set speed end=done;
do i = 1 to dim(above);
	limit = above{i};
	begin = start{i};
	end = stop{i};
	if start{i} then do;
		if speed &amp;lt; above{i} then do;
			output;
			call missing(start{i});
			end;
		else if done then do;
			end = dt;
			output;
			end;
		end;
	else if speed &amp;gt;= above{i} then start{i} = dt;
	stop{i} = dt;
	end;
format begin end datetime.;
keep limit begin end;
run;
	
proc print data=want noobs; run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;PRE&gt;limit 	begin 	end
55 	11DEC16:23:53:24 	11DEC16:23:53:28
42 	11DEC16:23:53:23 	11DEC16:23:53:29
42 	11DEC16:23:53:31 	11DEC16:23:53:34
55 	11DEC16:23:53:32 	11DEC16:23:53:34&lt;/PRE&gt;
&lt;P&gt;From there, it's only a matter of summing and counting.&lt;/P&gt;</description>
      <pubDate>Fri, 22 Nov 2019 18:20:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Count-conditional-on-continuous-value-being-above-a-number/m-p/606536#M176139</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2019-11-22T18:20:32Z</dc:date>
    </item>
    <item>
      <title>Re: Count conditional on continuous value being above a number</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Count-conditional-on-continuous-value-being-above-a-number/m-p/606557#M176145</link>
      <description>&lt;P&gt;The first part works great.&amp;nbsp; I changed the if-then-else block however to this construct:&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;above_42 = ifn(speed&amp;gt;= 15, above_42 + 1,0);&lt;BR /&gt;above_55 = ifn(speed&amp;gt;= 40, above_55 + 1,0);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;what is the purpose of "if missing(above_42) then above_42=0;&lt;/P&gt;&lt;P&gt;I would have expected this to be 'if missing the speed variable, then set the counter = 0'.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;everything else is the same.&amp;nbsp; Thanks!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 22 Nov 2019 19:50:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Count-conditional-on-continuous-value-being-above-a-number/m-p/606557#M176145</guid>
      <dc:creator>yelkenli</dc:creator>
      <dc:date>2019-11-22T19:50:08Z</dc:date>
    </item>
    <item>
      <title>Re: Count conditional on continuous value being above a number</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Count-conditional-on-continuous-value-being-above-a-number/m-p/606683#M176205</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;if missing(above_42) then above_42=0;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;This just rewrites initial missings (before the counters actually kick in) to zero. If your solution works, and plays well with the second block of code I posted, then stick with that.&lt;/P&gt;</description>
      <pubDate>Sat, 23 Nov 2019 16:13:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Count-conditional-on-continuous-value-being-above-a-number/m-p/606683#M176205</guid>
      <dc:creator>jvdl</dc:creator>
      <dc:date>2019-11-23T16:13:53Z</dc:date>
    </item>
  </channel>
</rss>

