<?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: data step by statement to ge the consecutive count in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/data-step-by-statement-to-ge-the-consecutive-count/m-p/461230#M284792</link>
    <description>&lt;P&gt;Since Hours are distinct values and the sort order you used makes every&amp;nbsp;&lt;SPAN&gt;played_yn&amp;nbsp;as First.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data temp;
infile datalines delimiter=',';
input player $ hour played_yn$;
datalines;
A,1,Y
A,2,Y
A,3,N
A,4,N
A,5,N
A,6,Y
B,1,Y
B,2,Y
B,3,N
B,4,N
B,5,N
;
run;
proc sort data=temp;
by player descending played_yn hour;
run;

data count;
retain UP_TIME DOWN_TIME;
set temp;
by player descending played_yn hour;
Lag_Hour=Lag(Hour);
IF 		(first.played_yn and played_yn='Y') 
	or  (played_yn='Y' and Hour-Lag_Hour^=1) 
 then DO;
		UP_TIME=1;
		DOWN_TIME=.;
		END;
ELSE IF played_yn='Y' THEN DO;
				UP_TIME+1;
				DOWN_TIME=.;
				END;
ELSE IF (first.played_yn and played_yn='N') 
	or  (played_yn='N' and Hour-Lag_Hour^=1) 
 then DO;
		UP_TIME=.;
		DOWN_TIME=1;
		END;
ELSE IF played_yn='N' THEN DO;
				UP_TIME=.;
				DOWN_TIME+1;
				END;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Thu, 10 May 2018 01:18:36 GMT</pubDate>
    <dc:creator>SuryaKiran</dc:creator>
    <dc:date>2018-05-10T01:18:36Z</dc:date>
    <item>
      <title>data step by statement to ge the consecutive count</title>
      <link>https://communities.sas.com/t5/SAS-Programming/data-step-by-statement-to-ge-the-consecutive-count/m-p/461223#M284791</link>
      <description>&lt;P&gt;need to keep track of each player's play time. for example:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Play HOUR PLAYED_YN&lt;/P&gt;
&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Y&lt;/P&gt;
&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Y&lt;/P&gt;
&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;3&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; N&lt;/P&gt;
&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 4&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;N&lt;/P&gt;
&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; N&lt;/P&gt;
&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;6&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Y&lt;/P&gt;
&lt;P&gt;I'd like to see&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Play HOUR PLAYED_YN&amp;nbsp; &amp;nbsp;UP_TIME DOWN_TIME&lt;/P&gt;
&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Y&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&lt;/P&gt;
&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Y&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2&lt;/P&gt;
&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;3&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; N&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; &amp;nbsp; &amp;nbsp;1&lt;/P&gt;
&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;4&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;N&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; &amp;nbsp; &amp;nbsp;2&lt;/P&gt;
&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; N&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; &amp;nbsp; &amp;nbsp;3&lt;/P&gt;
&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;6&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Y&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I want to keep count the consecutive hours a player played. somehow the returning results are looking weird&lt;/P&gt;
&lt;P&gt;data temp;&lt;BR /&gt;infile datalines delimiter=',';&lt;BR /&gt;input player $ hour played_yn$;&lt;BR /&gt;datalines;&lt;BR /&gt;A,1,Y&lt;BR /&gt;A,2,Y&lt;BR /&gt;A,3,N&lt;BR /&gt;A,4,N&lt;BR /&gt;A,5,N&lt;BR /&gt;;&lt;BR /&gt;run;&lt;BR /&gt;proc sort data=temp;by player hour played_yn;run;&lt;/P&gt;
&lt;P&gt;data count;&lt;BR /&gt;set temp;&lt;/P&gt;
&lt;P&gt;by player hour played_yn;&lt;/P&gt;
&lt;P&gt;if first.player and first.played_yn then do;&lt;BR /&gt;if played_yn = 'Y' then UP_TIME = 1;&lt;BR /&gt;if played_yn = 'Y' then DOWN_TIME = 1;&lt;BR /&gt;end;&lt;/P&gt;
&lt;P&gt;if played_yn = 'Y' then up_time = up_time+1;&lt;BR /&gt;if played_yn = 'N' then down_time = down_time+1;&lt;/P&gt;
&lt;P&gt;if last.player or last.played_yn then output;&lt;BR /&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 10 May 2018 00:08:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/data-step-by-statement-to-ge-the-consecutive-count/m-p/461223#M284791</guid>
      <dc:creator>YW_CA</dc:creator>
      <dc:date>2018-05-10T00:08:26Z</dc:date>
    </item>
    <item>
      <title>Re: data step by statement to ge the consecutive count</title>
      <link>https://communities.sas.com/t5/SAS-Programming/data-step-by-statement-to-ge-the-consecutive-count/m-p/461230#M284792</link>
      <description>&lt;P&gt;Since Hours are distinct values and the sort order you used makes every&amp;nbsp;&lt;SPAN&gt;played_yn&amp;nbsp;as First.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data temp;
infile datalines delimiter=',';
input player $ hour played_yn$;
datalines;
A,1,Y
A,2,Y
A,3,N
A,4,N
A,5,N
A,6,Y
B,1,Y
B,2,Y
B,3,N
B,4,N
B,5,N
;
run;
proc sort data=temp;
by player descending played_yn hour;
run;

data count;
retain UP_TIME DOWN_TIME;
set temp;
by player descending played_yn hour;
Lag_Hour=Lag(Hour);
IF 		(first.played_yn and played_yn='Y') 
	or  (played_yn='Y' and Hour-Lag_Hour^=1) 
 then DO;
		UP_TIME=1;
		DOWN_TIME=.;
		END;
ELSE IF played_yn='Y' THEN DO;
				UP_TIME+1;
				DOWN_TIME=.;
				END;
ELSE IF (first.played_yn and played_yn='N') 
	or  (played_yn='N' and Hour-Lag_Hour^=1) 
 then DO;
		UP_TIME=.;
		DOWN_TIME=1;
		END;
ELSE IF played_yn='N' THEN DO;
				UP_TIME=.;
				DOWN_TIME+1;
				END;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 10 May 2018 01:18:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/data-step-by-statement-to-ge-the-consecutive-count/m-p/461230#M284792</guid>
      <dc:creator>SuryaKiran</dc:creator>
      <dc:date>2018-05-10T01:18:36Z</dc:date>
    </item>
    <item>
      <title>Re: data step by statement to ge the consecutive count</title>
      <link>https://communities.sas.com/t5/SAS-Programming/data-step-by-statement-to-ge-the-consecutive-count/m-p/461242#M284793</link>
      <description>&lt;P&gt;It's a little difficult to tell what variables you want to work with, but I think this does the trick:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data want;&lt;/P&gt;
&lt;P&gt;set have;&lt;/P&gt;
&lt;P&gt;by player played_yn notsorted;&lt;/P&gt;
&lt;P&gt;if first.played_yn then do;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;up_time = .;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;down_time = .;&lt;/P&gt;
&lt;P&gt;end;&lt;/P&gt;
&lt;P&gt;if played_yn='Y' then up_time + 1;&lt;/P&gt;
&lt;P&gt;else down_time + 1;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This should at least get you from the top data set that you posted to the bottom data set.&amp;nbsp; Still, it outputs every observation.&amp;nbsp; You may want to insert something like this at the end:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;if last.played_yn then output;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 10 May 2018 03:13:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/data-step-by-statement-to-ge-the-consecutive-count/m-p/461242#M284793</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2018-05-10T03:13:10Z</dc:date>
    </item>
    <item>
      <title>Re: data step by statement to ge the consecutive count</title>
      <link>https://communities.sas.com/t5/SAS-Programming/data-step-by-statement-to-ge-the-consecutive-count/m-p/461642#M284794</link>
      <description>&lt;P&gt;this is exactly needed. Thank you.&lt;/P&gt;</description>
      <pubDate>Fri, 11 May 2018 17:51:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/data-step-by-statement-to-ge-the-consecutive-count/m-p/461642#M284794</guid>
      <dc:creator>YW_CA</dc:creator>
      <dc:date>2018-05-11T17:51:19Z</dc:date>
    </item>
    <item>
      <title>Re: data step by statement to ge the consecutive count</title>
      <link>https://communities.sas.com/t5/SAS-Programming/data-step-by-statement-to-ge-the-consecutive-count/m-p/461745#M284795</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/34689"&gt;@YW_CA&lt;/a&gt;&lt;/P&gt;
&lt;P&gt;If you've got the solution then please mark the answer which has given you "the best" answer as solution.&lt;/P&gt;</description>
      <pubDate>Sat, 12 May 2018 02:18:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/data-step-by-statement-to-ge-the-consecutive-count/m-p/461745#M284795</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2018-05-12T02:18:09Z</dc:date>
    </item>
  </channel>
</rss>

