<?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: a SQL question in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/a-SQL-question/m-p/55697#M11877</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;If your data is large, it could be slightly more efficient to execute only one function.&amp;nbsp; You could accomplish the task something like this:&lt;/P&gt;&lt;PRE&gt;/*Make some bigger data to play with*/
DATA Transactions(SORTEDBY=customer);
&amp;nbsp;&amp;nbsp; /* Customer one has only one transaction */
&amp;nbsp;&amp;nbsp; Customer=1;
&amp;nbsp;&amp;nbsp; Product_type='B';
&amp;nbsp;&amp;nbsp; output;
&amp;nbsp;&amp;nbsp; do Customer=2 to 10000;
&amp;nbsp;&amp;nbsp; /* Customers 2-10000 may have several transactions */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i=1 to 100;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select (round(RANUNI(0)*4));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when (1) Product_type='A';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when (2) Product_type='B';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when (3) Product_type='C';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when (4) Product_type='D';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; otherwise Product_type='';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;
&amp;nbsp;&amp;nbsp; /* Customers 100,1000 and 10000 will only buy product B */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Customer in (100,1000,10000) then Product_type='B';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Product_type ne '' then output;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;
&amp;nbsp;&amp;nbsp; end;
RUN;

/* Get the unique ID for customers who bought only product_type B */
/* Should include customers 1, 100, 1000 and 10000 */
PROC SQL;
CREATE TABLE B_Customers as
SELECT customer
&amp;nbsp;&amp;nbsp; FROM Transactions a
&amp;nbsp;&amp;nbsp; group by customer
&amp;nbsp;&amp;nbsp; having sum(product_type &amp;lt;&amp;gt; 'B')=0
;
QUIT;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Select distinct is not required in this case.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 27 Aug 2011 01:56:06 GMT</pubDate>
    <dc:creator>SASJedi</dc:creator>
    <dc:date>2011-08-27T01:56:06Z</dc:date>
    <item>
      <title>a SQL question</title>
      <link>https://communities.sas.com/t5/SAS-Programming/a-SQL-question/m-p/55694#M11874</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Suppose I have a dataset containing the info about product types each customer purchased like this:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/pre&lt;/P&gt;&lt;P&gt;Customer&amp;nbsp; Product_Type&lt;/P&gt;&lt;P&gt;C1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A&lt;/P&gt;&lt;P&gt;C1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B&lt;/P&gt;&lt;P&gt;C1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C&lt;/P&gt;&lt;P&gt;C2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; D&lt;/P&gt;&lt;P&gt;C3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B&lt;/P&gt;&lt;P&gt;C3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E&lt;/P&gt;&lt;P&gt;C4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I want to know which customers only purchase products of type B. Is it possible to get this using one PROC SQL?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 26 Aug 2011 21:17:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/a-SQL-question/m-p/55694#M11874</guid>
      <dc:creator>MarcTC</dc:creator>
      <dc:date>2011-08-26T21:17:40Z</dc:date>
    </item>
    <item>
      <title>a SQL question</title>
      <link>https://communities.sas.com/t5/SAS-Programming/a-SQL-question/m-p/55695#M11875</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Marc,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;There may be an easier way of expressing it, but I think that the following would do what you want:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;&amp;nbsp; select distinct customer&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; from have&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; group by customer&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; having min(Product_Type) eq "B" and&lt;/P&gt;&lt;P&gt;&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; max(Product_Type) eq "B"&lt;/P&gt;&lt;P&gt;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 26 Aug 2011 21:57:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/a-SQL-question/m-p/55695#M11875</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2011-08-26T21:57:03Z</dc:date>
    </item>
    <item>
      <title>a SQL question</title>
      <link>https://communities.sas.com/t5/SAS-Programming/a-SQL-question/m-p/55696#M11876</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;DATA input(SORTEDBY=customer);&lt;/P&gt;&lt;P&gt; INFILE cards;&lt;/P&gt;&lt;P&gt; INPUT customer $ product_type $;&lt;/P&gt;&lt;P&gt;CARDS;&lt;/P&gt;&lt;P&gt;C1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A&lt;/P&gt;&lt;P&gt;C1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B&lt;/P&gt;&lt;P&gt;C1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C&lt;/P&gt;&lt;P&gt;C2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; D&lt;/P&gt;&lt;P&gt;C3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B&lt;/P&gt;&lt;P&gt;C3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E&lt;/P&gt;&lt;P&gt;C4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;RUN;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* using normal datastep */&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA output(KEEP=customer);&lt;/P&gt;&lt;P&gt; SET input;&lt;/P&gt;&lt;P&gt; BY customer;&lt;/P&gt;&lt;P&gt; IF FIRST.customer THEN &lt;/P&gt;&lt;P&gt;&amp;nbsp; DO;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; b_buyer=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; other_buyer=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; END;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; IF product_type='B' THEN b_buyer+1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; IF product_type NE 'B' THEN other_buyer+1;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; IF LAST.customer and b_buyer&amp;gt;0 and other_buyer=0 THEN OUTPUT;&lt;/P&gt;&lt;P&gt;RUN;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* with proc sql */&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PROC SQL;&lt;/P&gt;&lt;P&gt; CREATE TABLE output2 as&lt;/P&gt;&lt;P&gt; SELECT customer /* not sure that having the distinct keyword here is necessary, in this limited case it is not */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; FROM input&lt;/P&gt;&lt;P&gt;&amp;nbsp; GROUP BY customer&lt;/P&gt;&lt;P&gt; HAVING MIN(product_type='B') and MAX(product_type='B');&lt;/P&gt;&lt;P&gt;QUIT;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 26 Aug 2011 22:58:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/a-SQL-question/m-p/55696#M11876</guid>
      <dc:creator>FriedEgg</dc:creator>
      <dc:date>2011-08-26T22:58:09Z</dc:date>
    </item>
    <item>
      <title>Re: a SQL question</title>
      <link>https://communities.sas.com/t5/SAS-Programming/a-SQL-question/m-p/55697#M11877</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;If your data is large, it could be slightly more efficient to execute only one function.&amp;nbsp; You could accomplish the task something like this:&lt;/P&gt;&lt;PRE&gt;/*Make some bigger data to play with*/
DATA Transactions(SORTEDBY=customer);
&amp;nbsp;&amp;nbsp; /* Customer one has only one transaction */
&amp;nbsp;&amp;nbsp; Customer=1;
&amp;nbsp;&amp;nbsp; Product_type='B';
&amp;nbsp;&amp;nbsp; output;
&amp;nbsp;&amp;nbsp; do Customer=2 to 10000;
&amp;nbsp;&amp;nbsp; /* Customers 2-10000 may have several transactions */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i=1 to 100;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select (round(RANUNI(0)*4));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when (1) Product_type='A';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when (2) Product_type='B';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when (3) Product_type='C';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when (4) Product_type='D';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; otherwise Product_type='';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;
&amp;nbsp;&amp;nbsp; /* Customers 100,1000 and 10000 will only buy product B */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Customer in (100,1000,10000) then Product_type='B';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Product_type ne '' then output;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;
&amp;nbsp;&amp;nbsp; end;
RUN;

/* Get the unique ID for customers who bought only product_type B */
/* Should include customers 1, 100, 1000 and 10000 */
PROC SQL;
CREATE TABLE B_Customers as
SELECT customer
&amp;nbsp;&amp;nbsp; FROM Transactions a
&amp;nbsp;&amp;nbsp; group by customer
&amp;nbsp;&amp;nbsp; having sum(product_type &amp;lt;&amp;gt; 'B')=0
;
QUIT;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Select distinct is not required in this case.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 27 Aug 2011 01:56:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/a-SQL-question/m-p/55697#M11877</guid>
      <dc:creator>SASJedi</dc:creator>
      <dc:date>2011-08-27T01:56:06Z</dc:date>
    </item>
    <item>
      <title>Re: a SQL question</title>
      <link>https://communities.sas.com/t5/SAS-Programming/a-SQL-question/m-p/55698#M11878</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;PRE&gt;DATA input;
INFILE cards;
INPUT customer $ product_type $;
CARDS;
C1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A
C1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B
C1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C
C2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; D
C3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B
C3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E
C4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B
C4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B
;
RUN;
proc sql;
 select distinct customer
&amp;nbsp; from input 
&amp;nbsp;&amp;nbsp; group by customer
&amp;nbsp;&amp;nbsp;&amp;nbsp; having count(distinct product_type) eq 1 and product_type eq 'B';
quit;
&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Ksharp&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 29 Aug 2011 07:29:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/a-SQL-question/m-p/55698#M11878</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2011-08-29T07:29:25Z</dc:date>
    </item>
  </channel>
</rss>

