<?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: Counting observation by region in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Counting-observation-by-region/m-p/699254#M213907</link>
    <description>&lt;P&gt;Maxim 14: Use the right tool.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can squeeze it out of PROC FREQ with ODS and TRANSPOSE:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;ods select none;
ods output nlevels=freq;
proc freq data=have nlevels;
by region notsorted;
tables customer_id method;
run;
ods select all;
ods output close;

proc transpose data=freq out=want (drop=_name_ _label_);
by region notsorted;
id tablevar;
var nlevels;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;or use two PROC SUMMARYs (one for each variable) and merge the results. But nothing is as straight forward as the SQL, so stay with that.&lt;/P&gt;</description>
    <pubDate>Mon, 16 Nov 2020 18:00:16 GMT</pubDate>
    <dc:creator>Kurt_Bremser</dc:creator>
    <dc:date>2020-11-16T18:00:16Z</dc:date>
    <item>
      <title>Counting observation by region</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Counting-observation-by-region/m-p/699229#M213889</link>
      <description>&lt;P&gt;I want to counting different result by region&lt;/P&gt;&lt;P&gt;Data:&lt;/P&gt;&lt;P&gt;Region&amp;nbsp; &amp;nbsp; Customer_ID&amp;nbsp; &amp;nbsp; &amp;nbsp;Method&lt;/P&gt;&lt;P&gt;USA&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; By Hand&lt;/P&gt;&lt;P&gt;USA&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; Shipping&lt;/P&gt;&lt;P&gt;USA&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; By Hand&lt;/P&gt;&lt;P&gt;USA&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; By Hand&lt;/P&gt;&lt;P&gt;USA&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; By Hand&lt;/P&gt;&lt;P&gt;USA&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; Shipping&lt;/P&gt;&lt;P&gt;USA&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; Express&lt;/P&gt;&lt;P&gt;USA&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; Express&lt;/P&gt;&lt;P&gt;TW&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;Express&lt;/P&gt;&lt;P&gt;TW&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;Express&lt;/P&gt;&lt;P&gt;TW&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;Express&lt;/P&gt;&lt;P&gt;HK&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; By Hand&lt;/P&gt;&lt;P&gt;HK&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; By Hand&lt;/P&gt;&lt;P&gt;HK&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; By Hand&lt;/P&gt;&lt;P&gt;Result should be like that:&lt;/P&gt;&lt;P&gt;Region&amp;nbsp; Total_Customer Total_Used_Method&lt;/P&gt;&lt;P&gt;USA&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;3&lt;/P&gt;&lt;P&gt;TW&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;1&lt;/P&gt;&lt;P&gt;HK&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; 1&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;</description>
      <pubDate>Mon, 16 Nov 2020 17:06:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Counting-observation-by-region/m-p/699229#M213889</guid>
      <dc:creator>rx5873</dc:creator>
      <dc:date>2020-11-16T17:06:27Z</dc:date>
    </item>
    <item>
      <title>Re: Counting observation by region</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Counting-observation-by-region/m-p/699237#M213894</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
create table want as
  select
    region,
    count(distinct customer_id) as total_customer,
    count(distinct method) as total_used_method
  from have
  group by region
;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 16 Nov 2020 17:18:41 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Counting-observation-by-region/m-p/699237#M213894</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2020-11-16T17:18:41Z</dc:date>
    </item>
    <item>
      <title>Re: Counting observation by region</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Counting-observation-by-region/m-p/699238#M213895</link>
      <description>if I don't want to use proc sql, what code I can use.&lt;BR /&gt;I need to write it by using if statement</description>
      <pubDate>Mon, 16 Nov 2020 17:22:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Counting-observation-by-region/m-p/699238#M213895</guid>
      <dc:creator>rx5873</dc:creator>
      <dc:date>2020-11-16T17:22:35Z</dc:date>
    </item>
    <item>
      <title>Re: Counting observation by region</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Counting-observation-by-region/m-p/699250#M213903</link>
      <description>&lt;P&gt;You can do that with a data step:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sort data=have nodupkey;
by Region Customer_ID  Method ;
run;

data want;
set have;
by region customer_id method;
if first.region then Total_Customer=0;

if first.customer_id then do;
Total_Used_Method=0;
Total_Customer+1;
end;

Total_Used_Method+1;
if last.region then output;
keep region Total_Customer Total_Used_Method ;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 16 Nov 2020 17:55:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Counting-observation-by-region/m-p/699250#M213903</guid>
      <dc:creator>Angel_Larrion</dc:creator>
      <dc:date>2020-11-16T17:55:25Z</dc:date>
    </item>
    <item>
      <title>Re: Counting observation by region</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Counting-observation-by-region/m-p/699252#M213905</link>
      <description>&lt;P&gt;HI&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/354862"&gt;@rx5873&lt;/a&gt;&amp;nbsp; I would choose Proc SQL over Datastep as it's user friendly and convenient for your question. So if may i suggest you should stick to the solution offered by&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/11562"&gt;@Kurt_Bremser&lt;/a&gt;&amp;nbsp;.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here is a solution that abuses HASH for fun but shouldn't be ideally a prod version-&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
data have;
input Region $    Customer_ID     Method  &amp;amp; $10.;
cards;
USA          1                      By Hand

USA          1                      Shipping

USA          1                      By Hand

USA          1                      By Hand

USA          2                      By Hand

USA          2                      Shipping

USA          2                      Express

USA          2                      Express

TW            2                      Express

TW            2                      Express

TW            2                      Express

HK             1                      By Hand

HK             2                      By Hand

HK             3                      By Hand
;
data want;
 if _n_=1 then do;
  dcl hash h();
  h.definekey('Method');
  h.definedone();
 end;
 do _n_=h.clear() by 0 until(last.region);
  set have;
  by region customer_id notsorted;
  Total_Customer=sum(Total_Customer,first.customer_id);
  if h.check() ne 0 then do;
   total_method=sum(total_method,1);
   h.add();
  end;
 end;
 keep region total_:;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 16 Nov 2020 17:56:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Counting-observation-by-region/m-p/699252#M213905</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2020-11-16T17:56:12Z</dc:date>
    </item>
    <item>
      <title>Re: Counting observation by region</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Counting-observation-by-region/m-p/699253#M213906</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/354862"&gt;@rx5873&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;if I don't want to use proc sql, what code I can use.&lt;BR /&gt;I need to write it by using if statement&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Since you seem to specify a specific method then provide an example of what you think is the method.&lt;/P&gt;
&lt;P&gt;"if statement" is pretty generic and might be used in any of a dozen ways and we really don't want to "guess" which is the "right" way that you think you want.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Proc freq would be another way to get counts and could be done with two calls to the proc, and do you need a data set for further manipulation or a report for people to read?&lt;/P&gt;</description>
      <pubDate>Mon, 16 Nov 2020 17:56:41 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Counting-observation-by-region/m-p/699253#M213906</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2020-11-16T17:56:41Z</dc:date>
    </item>
    <item>
      <title>Re: Counting observation by region</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Counting-observation-by-region/m-p/699254#M213907</link>
      <description>&lt;P&gt;Maxim 14: Use the right tool.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can squeeze it out of PROC FREQ with ODS and TRANSPOSE:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;ods select none;
ods output nlevels=freq;
proc freq data=have nlevels;
by region notsorted;
tables customer_id method;
run;
ods select all;
ods output close;

proc transpose data=freq out=want (drop=_name_ _label_);
by region notsorted;
id tablevar;
var nlevels;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;or use two PROC SUMMARYs (one for each variable) and merge the results. But nothing is as straight forward as the SQL, so stay with that.&lt;/P&gt;</description>
      <pubDate>Mon, 16 Nov 2020 18:00:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Counting-observation-by-region/m-p/699254#M213907</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2020-11-16T18:00:16Z</dc:date>
    </item>
    <item>
      <title>Re: Counting observation by region</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Counting-observation-by-region/m-p/699267#M213912</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/138205"&gt;@novinosrin&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;HI&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/354862"&gt;@rx5873&lt;/a&gt;&amp;nbsp; I would choose Proc SQL over Datastep as it's user friendly and convenient for your question. So if may i suggest you should stick to the solution offered by&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/11562"&gt;@Kurt_Bremser&lt;/a&gt;&amp;nbsp;.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;When someone has a specified implementation required it often means it's likely either homework or an interview test.&lt;/P&gt;</description>
      <pubDate>Mon, 16 Nov 2020 18:52:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Counting-observation-by-region/m-p/699267#M213912</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2020-11-16T18:52:00Z</dc:date>
    </item>
    <item>
      <title>Re: Counting observation by region</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Counting-observation-by-region/m-p/699273#M213914</link>
      <description>&lt;P&gt;Ah I see&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/13879"&gt;@Reeza&lt;/a&gt;&amp;nbsp; Hmm makes sense. That didn't cross my mind. Point taken. Thank you!&lt;/P&gt;</description>
      <pubDate>Mon, 16 Nov 2020 19:04:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Counting-observation-by-region/m-p/699273#M213914</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2020-11-16T19:04:50Z</dc:date>
    </item>
    <item>
      <title>Re: Counting observation by region</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Counting-observation-by-region/m-p/699474#M213975</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
data have;
input Region $    Customer_ID     Method  &amp;amp; $10.;
cards;
USA          1                      By Hand
USA          1                      Shipping
USA          1                      By Hand
USA          1                      By Hand
USA          2                      By Hand
USA          2                      Shipping
USA          2                      Express
USA          2                      Express
TW            2                      Express
TW            2                      Express
TW            2                      Express
HK             1                      By Hand
HK             2                      By Hand
HK             3                      By Hand
;
data want;
 if _n_=1 then do;
   if 0 then set have;
   declare hash c();
   c.definekey('Customer_ID');
   c.definedone();
   declare hash m();
   m.definekey('Method');
   m.definedone();
 end;
set have;
by region notsorted;
c.ref();m.ref();
if last.region then do;
  Total_Customer=c.num_items;
  Total_Used_Method=m.num_items;
  c.clear();m.clear();
  output;
end;
drop Customer_ID Method;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 17 Nov 2020 13:04:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Counting-observation-by-region/m-p/699474#M213975</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2020-11-17T13:04:50Z</dc:date>
    </item>
  </channel>
</rss>

