<?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 of multiple flags based on unique dates and IDs in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Count-of-multiple-flags-based-on-unique-dates-and-IDs/m-p/383451#M277008</link>
    <description>&lt;P&gt;Both of those miss a crucial part of the question: the count needs to be of distinct dates for each flags. You'll note if you look at the line for ID C that count_flag2 should be 1, not 2.&lt;/P&gt;</description>
    <pubDate>Thu, 27 Jul 2017 19:25:04 GMT</pubDate>
    <dc:creator>scify</dc:creator>
    <dc:date>2017-07-27T19:25:04Z</dc:date>
    <item>
      <title>Count of multiple flags based on unique dates and IDs</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Count-of-multiple-flags-based-on-unique-dates-and-IDs/m-p/383159#M277005</link>
      <description>&lt;P&gt;Say I have the following dataset:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data test;
	input id flag1 flag2 flag3 flag4 date;
	datalines;
	A 0 0 1 0 20170401
	A 1 0 0 0 20170402
	A 1 0 0 0 20170403
	A 0 0 0 1 20170405
	A 0 1 0 0 20170406
	A 1 0 0 0 20170407
	A 0 1 0 0 20170407
	B 1 0 0 0 20170402
	B 1 0 0 0 20170403
	C 0 0 1 0 20170404
	C 0 1 0 0 20170404
	C 0 1 0 0 20170404
	C 1 0 0 0 20170405
	D 0 0 0 0 20170405
	;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;If I wanted to create an output that counts the number of unique&amp;nbsp;dates each flag pops up on for each ID, what would be the best way of doing it, other than creating a separate intermediate dataset for each count and then combining it at the end? My initial thought had been to use a CASE WHEN and COUNT(DISTINCT&amp;nbsp;DATE)&amp;nbsp;in PROC SQL, but that just gave me a total count on the lines where a particular flag equaled 1.&lt;BR /&gt;&lt;BR /&gt;Desired outcome:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; count_flag1&amp;nbsp;&amp;nbsp;count_flag2&amp;nbsp; count_flag3&amp;nbsp; count_flag_4&lt;/P&gt;
&lt;P&gt;A&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;&amp;nbsp;&amp;nbsp; 3&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&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&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;B&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;&amp;nbsp;&amp;nbsp; 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;&amp;nbsp;&amp;nbsp;0&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; 0&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; 0&lt;/P&gt;
&lt;P&gt;C&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;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;&amp;nbsp;&amp;nbsp;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;&amp;nbsp;&amp;nbsp;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;&amp;nbsp; 0&lt;/P&gt;
&lt;P&gt;D&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&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;0&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; 0&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; 0&lt;/P&gt;</description>
      <pubDate>Thu, 27 Jul 2017 18:16:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Count-of-multiple-flags-based-on-unique-dates-and-IDs/m-p/383159#M277005</guid>
      <dc:creator>scify</dc:creator>
      <dc:date>2017-07-27T18:16:53Z</dc:date>
    </item>
    <item>
      <title>Re: Count of multiple flags based on unique dates and IDs</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Count-of-multiple-flags-based-on-unique-dates-and-IDs/m-p/383449#M277006</link>
      <description>&lt;P&gt;You can use proc summary (or proc means) to get what you want:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc summary data=have;
   class ID;
   var flag1-flag4;
   output out=want(rename=(
                     flag1=count_flag1 flag2=count_flag2 
                     flag3=count_flag3 flag4=count_flag4))
              sum=;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;or you can do it by sql:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
   create table wand as
        select id,
         sum(flag1) as count_flag1,
         sum(flag2) as count_flag2,
         sum(flag3) as count_flag3,
         sum(flag4) as count_flag4
   from have
   groupe by ID;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 27 Jul 2017 19:22:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Count-of-multiple-flags-based-on-unique-dates-and-IDs/m-p/383449#M277006</guid>
      <dc:creator>Shmuel</dc:creator>
      <dc:date>2017-07-27T19:22:47Z</dc:date>
    </item>
    <item>
      <title>Re: Count of multiple flags based on unique dates and IDs</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Count-of-multiple-flags-based-on-unique-dates-and-IDs/m-p/383450#M277007</link>
      <description>&lt;P&gt;A few sets of variables can handle this, with one pass through the data.&amp;nbsp; Assuming your data set is sorted BY ID DATE:&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 id date;&lt;/P&gt;
&lt;P&gt;if first.id then do;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; count_flag1=0; count_flag2=0; count_flag3=0; count_flag4=0;&lt;/P&gt;
&lt;P&gt;end;&lt;/P&gt;
&lt;P&gt;if first.date then do;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; max_flag1=0; max_flag2=0; max_flag3=0; max_flag4=0;&lt;/P&gt;
&lt;P&gt;end;&lt;/P&gt;
&lt;P&gt;retain max_flag: ;&lt;/P&gt;
&lt;P&gt;max_flag1 = max(flag1, max_flag1) ;&lt;/P&gt;
&lt;P&gt;max_flag2 = max(flag2, max_flag2) ;&lt;/P&gt;
&lt;P&gt;max_flag3 = max(flag3, max_flag3) ;&lt;/P&gt;
&lt;P&gt;max_flag4 = max(flag4, max_flag4) ;&lt;/P&gt;
&lt;P&gt;if last.date;&lt;/P&gt;
&lt;P&gt;count_flag1 + max_flag1;&lt;/P&gt;
&lt;P&gt;count_flag2&amp;nbsp;+ max_flag2;&lt;/P&gt;
&lt;P&gt;count_flag3 + max_flag3;&lt;/P&gt;
&lt;P&gt;count_flag4 + max_flag4;&lt;/P&gt;
&lt;P&gt;if last.id;&lt;/P&gt;
&lt;P&gt;drop max_flag: flag: ;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Note that the COUNT_FLAG variables are automatically retained ... that's one effect of the statements that look like:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;count_flag1 + max_flag1;&lt;/P&gt;</description>
      <pubDate>Thu, 27 Jul 2017 19:22:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Count-of-multiple-flags-based-on-unique-dates-and-IDs/m-p/383450#M277007</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2017-07-27T19:22:29Z</dc:date>
    </item>
    <item>
      <title>Re: Count of multiple flags based on unique dates and IDs</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Count-of-multiple-flags-based-on-unique-dates-and-IDs/m-p/383451#M277008</link>
      <description>&lt;P&gt;Both of those miss a crucial part of the question: the count needs to be of distinct dates for each flags. You'll note if you look at the line for ID C that count_flag2 should be 1, not 2.&lt;/P&gt;</description>
      <pubDate>Thu, 27 Jul 2017 19:25:04 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Count-of-multiple-flags-based-on-unique-dates-and-IDs/m-p/383451#M277008</guid>
      <dc:creator>scify</dc:creator>
      <dc:date>2017-07-27T19:25:04Z</dc:date>
    </item>
  </channel>
</rss>

