<?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 Find the first day of each month in a range in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Find-the-first-day-of-each-month-in-a-range/m-p/815431#M321866</link>
    <description>&lt;P&gt;Good morning.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I am attempting to find the first day of each month for which a record exits. For instance, person_1 may have been involved from 1/10/2012 through 8/17/2020 while another may have very different dates of involvement. What I need is the first day of each month in the range where the person existed. So person_1 would exist in 2/1/2012, 3/1/2012, 4/1/2012 all the way to 8/1/2020 and be counted on each first of each month. Unfortunately I don't have a clear "date" from which to count from I only have a range to count within.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Could anyone point me in the right direction?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thanks very much.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Have&lt;/P&gt;
&lt;TABLE width="372"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="124"&gt;person&lt;/TD&gt;
&lt;TD width="124"&gt;start&lt;/TD&gt;
&lt;TD width="124"&gt;end&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;PERSON_1&lt;/TD&gt;
&lt;TD&gt;1/10/2012&lt;/TD&gt;
&lt;TD&gt;8/17/2020&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;PERSON_2&lt;/TD&gt;
&lt;TD&gt;10/2/2020&lt;/TD&gt;
&lt;TD&gt;10/30/2020&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;PERSON_3&lt;/TD&gt;
&lt;TD&gt;9/30/2009&lt;/TD&gt;
&lt;TD&gt;9/30/2021&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;PERSON_4&lt;/TD&gt;
&lt;TD&gt;10/15/2013&lt;/TD&gt;
&lt;TD&gt;2/19/2014&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;PERSON_5&lt;/TD&gt;
&lt;TD&gt;2/1/2017&lt;/TD&gt;
&lt;TD&gt;12/31/2021&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;PERSON_6&lt;/TD&gt;
&lt;TD&gt;2/1/2017&lt;/TD&gt;
&lt;TD&gt;10/3/2021&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;PERSON_7&lt;/TD&gt;
&lt;TD&gt;6/29/2012&lt;/TD&gt;
&lt;TD&gt;11/30/2018&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;PERSON_8&lt;/TD&gt;
&lt;TD&gt;7/6/2014&lt;/TD&gt;
&lt;TD&gt;11/15/2016&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;PERSON_9&lt;/TD&gt;
&lt;TD&gt;7/29/2013&lt;/TD&gt;
&lt;TD&gt;6/14/2017&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;PERSON_10&lt;/TD&gt;
&lt;TD&gt;1/6/2014&lt;/TD&gt;
&lt;TD&gt;6/19/2019&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, 27 May 2022 16:04:44 GMT</pubDate>
    <dc:creator>Jeff_DOC</dc:creator>
    <dc:date>2022-05-27T16:04:44Z</dc:date>
    <item>
      <title>Find the first day of each month in a range</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Find-the-first-day-of-each-month-in-a-range/m-p/815431#M321866</link>
      <description>&lt;P&gt;Good morning.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I am attempting to find the first day of each month for which a record exits. For instance, person_1 may have been involved from 1/10/2012 through 8/17/2020 while another may have very different dates of involvement. What I need is the first day of each month in the range where the person existed. So person_1 would exist in 2/1/2012, 3/1/2012, 4/1/2012 all the way to 8/1/2020 and be counted on each first of each month. Unfortunately I don't have a clear "date" from which to count from I only have a range to count within.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Could anyone point me in the right direction?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thanks very much.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Have&lt;/P&gt;
&lt;TABLE width="372"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="124"&gt;person&lt;/TD&gt;
&lt;TD width="124"&gt;start&lt;/TD&gt;
&lt;TD width="124"&gt;end&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;PERSON_1&lt;/TD&gt;
&lt;TD&gt;1/10/2012&lt;/TD&gt;
&lt;TD&gt;8/17/2020&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;PERSON_2&lt;/TD&gt;
&lt;TD&gt;10/2/2020&lt;/TD&gt;
&lt;TD&gt;10/30/2020&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;PERSON_3&lt;/TD&gt;
&lt;TD&gt;9/30/2009&lt;/TD&gt;
&lt;TD&gt;9/30/2021&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;PERSON_4&lt;/TD&gt;
&lt;TD&gt;10/15/2013&lt;/TD&gt;
&lt;TD&gt;2/19/2014&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;PERSON_5&lt;/TD&gt;
&lt;TD&gt;2/1/2017&lt;/TD&gt;
&lt;TD&gt;12/31/2021&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;PERSON_6&lt;/TD&gt;
&lt;TD&gt;2/1/2017&lt;/TD&gt;
&lt;TD&gt;10/3/2021&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;PERSON_7&lt;/TD&gt;
&lt;TD&gt;6/29/2012&lt;/TD&gt;
&lt;TD&gt;11/30/2018&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;PERSON_8&lt;/TD&gt;
&lt;TD&gt;7/6/2014&lt;/TD&gt;
&lt;TD&gt;11/15/2016&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;PERSON_9&lt;/TD&gt;
&lt;TD&gt;7/29/2013&lt;/TD&gt;
&lt;TD&gt;6/14/2017&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;PERSON_10&lt;/TD&gt;
&lt;TD&gt;1/6/2014&lt;/TD&gt;
&lt;TD&gt;6/19/2019&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, 27 May 2022 16:04:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Find-the-first-day-of-each-month-in-a-range/m-p/815431#M321866</guid>
      <dc:creator>Jeff_DOC</dc:creator>
      <dc:date>2022-05-27T16:04:44Z</dc:date>
    </item>
    <item>
      <title>Re: Find the first day of each month in a range</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Find-the-first-day-of-each-month-in-a-range/m-p/815433#M321867</link>
      <description>&lt;P&gt;Do you just want to count the number of persons per month?&lt;/P&gt;
&lt;P&gt;So something like this as output?&lt;/P&gt;
&lt;PRE&gt;Obs          date    n_person

115    2019-03-01        5
116    2019-04-01        5
117    2019-05-01        5
118    2019-06-01        5
119    2019-07-01        4
120    2019-08-01        4
121    2019-09-01        4
122    2019-10-01        4
123    2019-11-01        4
124    2019-12-01        4
&lt;/PRE&gt;
&lt;P&gt;You can find the range of dates from the data:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql ;
create table dates as
  select min( min(start,end) ) as start format=yymmdd10.
       , max( max(start,end) ) as end   format=yymmdd10.
  from have
;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;And then blow that up to one observation per month.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data dates;
  set dates;
  do offset = 0 to intck('month',start,end);
    date=intnx('month',start,offset);
    output;
  end;
  format date yymmdd10.;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Now you can join it with your actual data and count the number of distinct PERSON values per month.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql ;
create table want as 
  select a.date 
       , count(distinct b.person) as n_person
  from dates a
   left join have b
  on a.date between b.start and b.end
  group by 1
;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 27 May 2022 16:24:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Find-the-first-day-of-each-month-in-a-range/m-p/815433#M321867</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2022-05-27T16:24:19Z</dc:date>
    </item>
    <item>
      <title>Re: Find the first day of each month in a range</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Find-the-first-day-of-each-month-in-a-range/m-p/815434#M321868</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
	infile cards dlm='09'x;
	input person :$10. start :mmddyy10.	end  :mmddyy10.;
	format start end date9.;
	cards;
PERSON_1	1/10/2012	8/17/2020
PERSON_2	10/2/2020	10/30/2020
PERSON_3	9/30/2009	9/30/2021
PERSON_4	10/15/2013	2/19/2014
PERSON_5	2/1/2017	12/31/2021
PERSON_6	2/1/2017	10/3/2021
PERSON_7	6/29/2012	11/30/2018
PERSON_8	7/6/2014	11/15/2016
PERSON_9	7/29/2013	6/14/2017
PERSON_10	1/6/2014	6/19/2019
PERSON_11	1/6/2014	1/20/2014
;
	;
	;;
run;

data want;
	set have;
	i=1;

	if put(start, yymmn6.) ne put(end, yymmn6.) then /*what happens if the start is same year month as end?*/
		do while (date&amp;lt;end);
			date=intnx('month', start, i, 'b');
			i+1;
			output;
		end;
	else
		output;
	format date date9.;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;You don't indicate output requirements.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 27 May 2022 16:28:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Find-the-first-day-of-each-month-in-a-range/m-p/815434#M321868</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2022-05-27T16:28:59Z</dc:date>
    </item>
    <item>
      <title>Re: Find the first day of each month in a range</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Find-the-first-day-of-each-month-in-a-range/m-p/815442#M321872</link>
      <description>&lt;P&gt;I so wish there was a way to accept two solutions as correct. Both of your solutions worked so honestly I flipped a coin (who has coins these days?).&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you both very much for your help. Both solutions give me exactly what I need.&lt;/P&gt;</description>
      <pubDate>Fri, 27 May 2022 17:41:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Find-the-first-day-of-each-month-in-a-range/m-p/815442#M321872</guid>
      <dc:creator>Jeff_DOC</dc:creator>
      <dc:date>2022-05-27T17:41:56Z</dc:date>
    </item>
  </channel>
</rss>

