<?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: How do I count unique observation by creating new variables for patient visits between dates? in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-count-unique-observation-by-creating-new-variables-for/m-p/708603#M217791</link>
    <description>&lt;P&gt;what if the number of visits is greater than the number of months between&amp;nbsp;Startdate and Enddate?&lt;/P&gt;</description>
    <pubDate>Tue, 29 Dec 2020 17:43:50 GMT</pubDate>
    <dc:creator>PhilC</dc:creator>
    <dc:date>2020-12-29T17:43:50Z</dc:date>
    <item>
      <title>How do I count unique observation by creating new variables for patient visits between dates?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-count-unique-observation-by-creating-new-variables-for/m-p/708588#M217785</link>
      <description>&lt;P&gt;Hello all,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have dataset for a patient population with a start and an end date. I have also have the date for their visits to the hospital. I want to create a new variable which counts their visits to the hospital including the months with zero visits.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The dataset looks like this:&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;Startdate&lt;/TD&gt;&lt;TD&gt;Enddate&lt;/TD&gt;&lt;TD&gt;Visitdate&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;15JAN2016&lt;/TD&gt;&lt;TD&gt;09AUG2016&lt;/TD&gt;&lt;TD&gt;10MAR2016&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;15JAN2016&lt;/TD&gt;&lt;TD&gt;09AUG2016&lt;/TD&gt;&lt;TD&gt;13MAR2016&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;15JAN2016&lt;/TD&gt;&lt;TD&gt;09AUG2016&lt;/TD&gt;&lt;TD&gt;09JUN2016&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;08MAR2016&lt;/TD&gt;&lt;TD&gt;12JUL2016&lt;/TD&gt;&lt;TD&gt;15MAR2016&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;08MAR2016&lt;/TD&gt;&lt;TD&gt;12JUL2016&lt;/TD&gt;&lt;TD&gt;25MAR2016&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;08MAR2016&lt;/TD&gt;&lt;TD&gt;12JUL2016&lt;/TD&gt;&lt;TD&gt;6JUNE2016&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;08MAR2016&lt;/TD&gt;&lt;TD&gt;12JUL2016&lt;/TD&gt;&lt;TD&gt;3JUL2016&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;&lt;P&gt;What I want is:&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;Startdate&lt;/TD&gt;&lt;TD&gt;Enddate&lt;/TD&gt;&lt;TD&gt;Visitdate&lt;/TD&gt;&lt;TD&gt;Newdate&lt;/TD&gt;&lt;TD&gt;Count&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;15JAN2016&lt;/TD&gt;&lt;TD&gt;09AUG2016&lt;/TD&gt;&lt;TD&gt;10MAR2016&lt;/TD&gt;&lt;TD&gt;JAN2016&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;15JAN2016&lt;/TD&gt;&lt;TD&gt;09AUG2016&lt;/TD&gt;&lt;TD&gt;13MAR2016&lt;/TD&gt;&lt;TD&gt;FEB2016&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;15JAN2016&lt;/TD&gt;&lt;TD&gt;09AUG2016&lt;/TD&gt;&lt;TD&gt;09JUN2016&lt;/TD&gt;&lt;TD&gt;MAR2016&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;15JAN2016&lt;/TD&gt;&lt;TD&gt;09AUG2016&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;APR2016&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;15JAN2016&lt;/TD&gt;&lt;TD&gt;09AUG2016&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;MAY2016&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;15JAN2016&lt;/TD&gt;&lt;TD&gt;09AUG2016&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;JUN2016&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;15JAN2016&lt;/TD&gt;&lt;TD&gt;09AUG2016&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;JUL2016&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;15JAN2016&lt;/TD&gt;&lt;TD&gt;09AUG2016&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;AUG2016&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;08MAR2016&lt;/TD&gt;&lt;TD&gt;12JUL2016&lt;/TD&gt;&lt;TD&gt;15MAR2016&lt;/TD&gt;&lt;TD&gt;MAR2016&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;08MAR2016&lt;/TD&gt;&lt;TD&gt;12JUL2016&lt;/TD&gt;&lt;TD&gt;25MAR2016&lt;/TD&gt;&lt;TD&gt;APR2016&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;08MAR2016&lt;/TD&gt;&lt;TD&gt;12JUL2016&lt;/TD&gt;&lt;TD&gt;6JUNE2016&lt;/TD&gt;&lt;TD&gt;MAY2016&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;08MAR2016&lt;/TD&gt;&lt;TD&gt;12JUL2016&lt;/TD&gt;&lt;TD&gt;3JUL2016&lt;/TD&gt;&lt;TD&gt;JUN2016&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;08MAR2016&lt;/TD&gt;&lt;TD&gt;12JUL2016&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;JUL2016&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am looking to create these two variables in the dataset so I can get the counts for the visits by each month between the first and last date. Please help me find a solution for this.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;</description>
      <pubDate>Tue, 29 Dec 2020 16:38:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-I-count-unique-observation-by-creating-new-variables-for/m-p/708588#M217785</guid>
      <dc:creator>raajdesaii</dc:creator>
      <dc:date>2020-12-29T16:38:17Z</dc:date>
    </item>
    <item>
      <title>Re: How do I count unique observation by creating new variables for patient visits between dates?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-count-unique-observation-by-creating-new-variables-for/m-p/708603#M217791</link>
      <description>&lt;P&gt;what if the number of visits is greater than the number of months between&amp;nbsp;Startdate and Enddate?&lt;/P&gt;</description>
      <pubDate>Tue, 29 Dec 2020 17:43:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-I-count-unique-observation-by-creating-new-variables-for/m-p/708603#M217791</guid>
      <dc:creator>PhilC</dc:creator>
      <dc:date>2020-12-29T17:43:50Z</dc:date>
    </item>
    <item>
      <title>Re: How do I count unique observation by creating new variables for patient visits between dates?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-count-unique-observation-by-creating-new-variables-for/m-p/708606#M217794</link>
      <description>The dates for the visits lie between the start and end dates.</description>
      <pubDate>Tue, 29 Dec 2020 17:49:46 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-I-count-unique-observation-by-creating-new-variables-for/m-p/708606#M217794</guid>
      <dc:creator>raajdesaii</dc:creator>
      <dc:date>2020-12-29T17:49:46Z</dc:date>
    </item>
    <item>
      <title>Re: How do I count unique observation by creating new variables for patient visits between dates?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-count-unique-observation-by-creating-new-variables-for/m-p/708611#M217796</link>
      <description>&lt;P&gt;The 'WANT' dataset does not make much sense on it's own.&amp;nbsp; You should not mix aggregate data (those counts) with detail data in the same row.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;What if an ID had 30 detail records for visits over 3 months ? You would a lot more detail (30) than aggregates (3).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;A more reasonable 'want' would look like&lt;/P&gt;
&lt;PRE&gt;id month count
-- ----- -----&lt;/PRE&gt;
&lt;P&gt;Perhaps reported in a layout such as&lt;/P&gt;
&lt;PRE&gt;id startmonth visits_count_in_month_1 ...to... visits_count_in_month_&amp;lt;n&amp;gt;&lt;BR /&gt;-- --------- --- --- --- --- --- --- --- --- --- ---&lt;BR /&gt;1  15JAN2016  0   0   2   0   0   1   0   0&lt;/PRE&gt;
&lt;P&gt;where &amp;lt;n&amp;gt; is the number of months start to end.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Example:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input ID Startdate	Enddate	Visitdate;
  format startdate enddate visitdate date9.;
informat startdate enddate visitdate date9.;
datalines;
1	15JAN2016	09AUG2016	10MAR2016
1	15JAN2016	09AUG2016	13MAR2016
1	15JAN2016	09AUG2016	09JUN2016
2	08MAR2016	12JUL2016	15MAR2016
2	08MAR2016	12JUL2016	25MAR2016
2	08MAR2016	12JUL2016	6JUN2016
2	08MAR2016	12JUL2016	3JUL2016
;

data want_way1;
  * array using direct index element for frequency counting;
  * index is the numeric sas date value for a month;

  array months(0:%sysfunc(today())) _temporary_;

  do until (last.id);
    set have;
    by id;

    months(intnx('month', visitdate, 0)) + 1;
  end;

  startmonth =intnx('month', startdate, 0);

  do index = 0 to intck('month', startdate, enddate);
    month = intnx('month', startdate, index);
    count = coalesce(months(month),0);
    output; 
  end;

  call missing (of months(*));

  keep id index month count startmonth;
  format month startmonth nldateymm.;
run;

ods html file='wide.html' style=plateau; 

proc report data=want_way1;
 columns id startmonth count,index;
 define id / group;
 define startmonth / min;
 define index / ' ' across;
 define count / 'Freq in month ';
run;

ods html close;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Produces&lt;/P&gt;
&lt;P&gt;data&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RichardADeVenezia_1-1609264615702.png" style="width: 400px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/53083iE20440D06E8CA96E/image-size/medium?v=v2&amp;amp;px=400" role="button" title="RichardADeVenezia_1-1609264615702.png" alt="RichardADeVenezia_1-1609264615702.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;and report output&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RichardADeVenezia_0-1609264565530.png" style="width: 400px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/53082iEDD663FA076EA48F/image-size/medium?v=v2&amp;amp;px=400" role="button" title="RichardADeVenezia_0-1609264565530.png" alt="RichardADeVenezia_0-1609264565530.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;A second way to get the counts is to create a months data set covering each id.&amp;nbsp; Aggregate a join of the dates coverage with the details data grouping by id and month.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Example:&lt;/P&gt;
&lt;PRE&gt;data months_per_id;
  set have;
  by id;
  if first.id;
  do index = 0 to intck('month', startdate, enddate);
    month = intnx('month', startdate, index);
    output; 
  end;
  keep id index month; format month nldateymm.;
run;

proc sql;
  create table want_way2 as
  select M.id, index, month, sum(intck('month', month, visitdate)=0) as count
  from have join months_per_id as M
  on have.id = M.id
  group by M.id, M.index, M.month
  ;&lt;/PRE&gt;</description>
      <pubDate>Tue, 29 Dec 2020 18:08:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-I-count-unique-observation-by-creating-new-variables-for/m-p/708611#M217796</guid>
      <dc:creator>RichardDeVen</dc:creator>
      <dc:date>2020-12-29T18:08:54Z</dc:date>
    </item>
    <item>
      <title>Re: How do I count unique observation by creating new variables for patient visits between dates?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-count-unique-observation-by-creating-new-variables-for/m-p/708620#M217800</link>
      <description>&lt;P&gt;You don't need that awkward data structure to get your counts. Try this way:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;/* Create the required months */
data months;
do until(last.id);
    set have; by id;
    firstMonth = min(intnx("month", startdate, 0), firstmonth);
    lastMonth = max(intnx("month", enddate, 0), lastmonth);
    end;
monthDate = firstMonth;
do until(monthDate &amp;gt; lastMonth);
    output;
    monthDate = intnx("month", monthDate, 1);
    end;
format monthDate monyy7.;
keep id monthDate;
run;

/* Count the visits per month */
proc sql;
create table monthlyVisits as
select
    a.id,
    a.monthDate,
    count(visitDate) as nbVisits
from 
    months as a left join
    have as b on a.id=b.id and intnx("month", b.visitDate, 0) = a.monthDate
group by a.id, a.monthDate;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 29 Dec 2020 18:26:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-I-count-unique-observation-by-creating-new-variables-for/m-p/708620#M217800</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2020-12-29T18:26:03Z</dc:date>
    </item>
    <item>
      <title>Re: How do I count unique observation by creating new variables for patient visits between dates?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-count-unique-observation-by-creating-new-variables-for/m-p/708622#M217801</link>
      <description>&lt;P&gt;First,&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/196010"&gt;@raajdesaii&lt;/a&gt;&amp;nbsp;, I will leave it to you to add the Visitdate column as you would like it.&amp;nbsp; Aside from that, this class of problem is interesting to me because I face it in my work too.&amp;nbsp; I think this is the way I handle this kind of problem.&amp;nbsp; It needs these five steps, I say, if for anything, to be able understand what we had programmed when we look back six months later.&lt;CODE class=" language-sas"&gt;&lt;/CODE&gt;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data IDs;
  set have (Keep=ID	Startdate	Enddate);
    by ID;
  if first.ID;
run;

data AllNewDates (sortedby=ID Newdate);
  set IDs;

  Newdate=intnx('month',Startdate,0);
  do while (Newdate&amp;lt;Enddate);
      Count=0;
      output;
    Newdate=intnx('month',Newdate,1);
  end;
run;

data Newdates0 (Keep=ID	Newdate);
  set have (Keep=ID	Visitdate);

  Newdate=intnx('month',Visitdate,0);
  format Newdate date9.;
run;

proc freq data=Newdates0;
  by ID;
  table Newdate / out=Newdates(drop=PERCENT) noprint;
  format Newdate date9.;
run;

data want;
  update AllNewDates Newdates;
    by ID Newdate;
  format Newdate monyy7.;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 29 Dec 2020 18:38:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-I-count-unique-observation-by-creating-new-variables-for/m-p/708622#M217801</guid>
      <dc:creator>PhilC</dc:creator>
      <dc:date>2020-12-29T18:38:32Z</dc:date>
    </item>
  </channel>
</rss>

