<?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: Flagging SQL Join result in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Flagging-SQL-Join-result/m-p/653152#M196180</link>
    <description>Sure thing, i will change the post</description>
    <pubDate>Thu, 04 Jun 2020 11:21:08 GMT</pubDate>
    <dc:creator>teelov</dc:creator>
    <dc:date>2020-06-04T11:21:08Z</dc:date>
    <item>
      <title>Flagging SQL Join result</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flagging-SQL-Join-result/m-p/653142#M196174</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;I'm hoping that someone can help me create a flag after joining two tables together and omitting the records which were not in B (IF A AND NOT B) - Identify and flag the KEY whereby there are additional REF_NOs in dataset 1 that do not exist in dataset 2 (but the KEY does exist in both) – e.g. ref 20 and 30. IF there are KEYS in dataset 1 that aren’t in 2 then I’m not interested in those (KEY 3 in this example)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;DATA WORK.DS1;
    LENGTH
        key                8
        ref_no             8
        colour           $ 6 ;
    FORMAT
        key              BEST12.
        ref_no           BEST12.
        colour           $CHAR6. ;
    INFORMAT
        key              BEST12.
        ref_no           BEST12.
        colour           $CHAR6. ;
    INFILE DATALINES4
        DLM=','
        MISSOVER
        DSD ;
    INPUT
        key              : BEST32.
        ref_no           : BEST32.
        colour           : $CHAR6. ;
DATALINES4;
1,10,red
1,20,black
1,30,blue
1,50,red
2,70,pink
2,75,blue
3,100,black
3,110,blue
4,250,red
4,275,green
4,250,orange
4,275,purple
;;;;&lt;/CODE&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;DATA WORK.DS2;
    LENGTH
        key                8
        ref_no             8
        make             $ 8
        model            $ 1 ;
    FORMAT
        key              BEST12.
        ref_no           BEST12.
        make             $CHAR8.
        model            $CHAR1. ;
    INFORMAT
        key              BEST12.
        ref_no           BEST12.
        make             $CHAR8.
        model            $CHAR1. ;
    INFILE DATALINES4
        DLM=','
        MISSOVER
        DSD ;
    INPUT
        key              : BEST32.
        ref_no           : BEST32.
        make             : $CHAR8.
        model            : $CHAR1. ;
DATALINES4;
1,10,sony, 
1,50,casio, 
2,70,sony, 
2,75,samsung, 
4,200,phillips, 
4,225,sony, 
4,250,samsung, 
4,275,phillips, 
;;;;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;code for the join&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql ;
     create table MS_OUTPUT as
     select L.KEY,
              L.REF_NO,
              L.Colour,
              R.Make,
              R.Model
              
              from DS1 L 
           left join
           DS2 R
           on L.KEY=R.KEY
           and L.REF_NO=R.REF_NO
           where L.KEY in (select KEY from DS2)
           order by KEY, REF_NO;
quit;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;WANT&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="teelov_0-1591271211937.png" style="width: 400px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/40342iC31C7F416BE9E74D/image-size/medium?v=v2&amp;amp;px=400" role="button" title="teelov_0-1591271211937.png" alt="teelov_0-1591271211937.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 04 Jun 2020 11:47:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flagging-SQL-Join-result/m-p/653142#M196174</guid>
      <dc:creator>teelov</dc:creator>
      <dc:date>2020-06-04T11:47:07Z</dc:date>
    </item>
    <item>
      <title>Re: Flagging SQL Join result</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flagging-SQL-Join-result/m-p/653147#M196175</link>
      <description>&lt;P&gt;Is it a requirement to use Proc SQL?&lt;/P&gt;</description>
      <pubDate>Thu, 04 Jun 2020 11:10:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flagging-SQL-Join-result/m-p/653147#M196175</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2020-06-04T11:10:16Z</dc:date>
    </item>
    <item>
      <title>Re: Flagging SQL Join result</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flagging-SQL-Join-result/m-p/653150#M196178</link>
      <description>&lt;P&gt;If you provide your datasets in usable form (data steps with datalines), I'll be happy to rub my brain against this.&lt;/P&gt;</description>
      <pubDate>Thu, 04 Jun 2020 11:18:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flagging-SQL-Join-result/m-p/653150#M196178</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2020-06-04T11:18:03Z</dc:date>
    </item>
    <item>
      <title>Re: Flagging SQL Join result</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flagging-SQL-Join-result/m-p/653151#M196179</link>
      <description>No, but my thinking was these datasets are in the 10s of millions so sorting them before hand could be an overhead, but open to suggestions.</description>
      <pubDate>Thu, 04 Jun 2020 11:20:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flagging-SQL-Join-result/m-p/653151#M196179</guid>
      <dc:creator>teelov</dc:creator>
      <dc:date>2020-06-04T11:20:49Z</dc:date>
    </item>
    <item>
      <title>Re: Flagging SQL Join result</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flagging-SQL-Join-result/m-p/653152#M196180</link>
      <description>Sure thing, i will change the post</description>
      <pubDate>Thu, 04 Jun 2020 11:21:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flagging-SQL-Join-result/m-p/653152#M196180</guid>
      <dc:creator>teelov</dc:creator>
      <dc:date>2020-06-04T11:21:08Z</dc:date>
    </item>
    <item>
      <title>Re: Flagging SQL Join result</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flagging-SQL-Join-result/m-p/653157#M196184</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/23443"&gt;@teelov&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;No, but my thinking was these datasets are in the 10s of millions so sorting them before hand could be an overhead, but open to suggestions.&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;A join in SQL will need an implicit sort to be done anyway (unless you have indexes defined, or your libraries point to a DBMS where the sort can be done in-memory); very often a SQL join on big datasets is less performant than the sorts and a DATA step MERGE.&lt;/P&gt;</description>
      <pubDate>Thu, 04 Jun 2020 11:29:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flagging-SQL-Join-result/m-p/653157#M196184</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2020-06-04T11:29:54Z</dc:date>
    </item>
    <item>
      <title>Re: Flagging SQL Join result</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flagging-SQL-Join-result/m-p/653174#M196197</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/23443"&gt;@teelov&lt;/a&gt;&amp;nbsp; If I understand your requirement correctly, it's pretty straight forward SQL&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
data have1;
input KEY	REF_NO	Colour :$10.	Type	Dimensions;
cards;
1	10	red	.	.
1	20	black	.	.
1	30	blue	.	.
1	50	red	.	.
2	70	pink	.	.
2	75	blue	.	.
3	100	black	.	.
3	110	blue	.	.
4	200	red	.	.
4	225	green	.	.
4	250	orange	.	.
4	275	purple	.	.
;

data have2;
input KEY	REF_NO	Make :$10.	Model;
cards;
1	10	sony	.
1	50	casio	.
2	70	sony	.
2	75	samsung	.
4	200	phillips	.
4	225	sony	.
4	250	samsung	.
4	275	phillips	.
;

proc sql;
create table want as
select a.*,make, model,n(b.ref_no) and sum(a.ref_no ne b.ref_no) as flag
from have1 a left join have2 b
on a.key=b.key and a.ref_no=b.ref_no
group by a.key
having n(b.ref_no);
quit;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="branch"&gt;
&lt;DIV&gt;
&lt;DIV align="center"&gt;
&lt;TABLE class="table" summary="Procedure Print: Data Set WORK.WANT1" frame="box" rules="all" cellspacing="0" cellpadding="5"&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="r header" scope="col"&gt;KEY&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;REF_NO&lt;/TH&gt;
&lt;TH class="l header" scope="col"&gt;Colour&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;Type&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;Dimensions&lt;/TH&gt;
&lt;TH class="l header" scope="col"&gt;Make&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;Model&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;flag&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;10&lt;/TD&gt;
&lt;TD class="l data"&gt;red&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="l data"&gt;sony&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;20&lt;/TD&gt;
&lt;TD class="l data"&gt;black&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="l data"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;30&lt;/TD&gt;
&lt;TD class="l data"&gt;blue&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="l data"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;50&lt;/TD&gt;
&lt;TD class="l data"&gt;red&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="l data"&gt;casio&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;2&lt;/TD&gt;
&lt;TD class="r data"&gt;70&lt;/TD&gt;
&lt;TD class="l data"&gt;pink&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="l data"&gt;sony&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;2&lt;/TD&gt;
&lt;TD class="r data"&gt;75&lt;/TD&gt;
&lt;TD class="l data"&gt;blue&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="l data"&gt;samsung&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;4&lt;/TD&gt;
&lt;TD class="r data"&gt;200&lt;/TD&gt;
&lt;TD class="l data"&gt;red&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="l data"&gt;phillips&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;4&lt;/TD&gt;
&lt;TD class="r data"&gt;225&lt;/TD&gt;
&lt;TD class="l data"&gt;green&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="l data"&gt;sony&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;4&lt;/TD&gt;
&lt;TD class="r data"&gt;250&lt;/TD&gt;
&lt;TD class="l data"&gt;orange&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="l data"&gt;samsung&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;4&lt;/TD&gt;
&lt;TD class="r data"&gt;275&lt;/TD&gt;
&lt;TD class="l data"&gt;purple&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="l data"&gt;phillips&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;</description>
      <pubDate>Thu, 04 Jun 2020 11:56:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flagging-SQL-Join-result/m-p/653174#M196197</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2020-06-04T11:56:11Z</dc:date>
    </item>
    <item>
      <title>Re: Flagging SQL Join result</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flagging-SQL-Join-result/m-p/653180#M196199</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data ds1;
infile datalines missover;
input key ref_no Colour $ Type $ Dimensions;
datalines;
1 10  red     
1 20  black   
1 30  blue    
1 50  red     
2 70  pink    
2 75  blue    
3 100 black   
3 110 blue    
4 200 red     
4 225 green   
4 250 orange  
4 275 purple  
;

data ds2;
infile datalines missover;
input key ref_no Make $ Model $;
datalines;
1 10  sony     
1 50  casio    
2 70  sony     
2 75  samsung  
4 200 phillips
4 225 sony    
4 250 samsung 
4 275 phillips
;

data want(drop=rc);
    if _N_ = 1 then do;
        declare hash h1 (dataset : 'ds2');
        h1.definekey ('key');
        h1.definedone (); 
        declare hash h2 (dataset : 'ds2', ordered : 'A');
        h2.definekey ('key', 'ref_no');
        h2.definedata (all : 'Y');
        h2.definedone ();
        if 0 then set ds2;
    end;
    do _N_ = 1 by 1 until (last.key);
        set ds1;
        by key;
        if h2.check() then flag = 1;
    end;
    do _N_ = 1 to _N_;
        set ds1;
        call missing (Make, Model);
        rc = h2.find();
        if h1.check() = 0 then output;
    end;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 04 Jun 2020 12:11:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flagging-SQL-Join-result/m-p/653180#M196199</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2020-06-04T12:11:33Z</dc:date>
    </item>
    <item>
      <title>Re: Flagging SQL Join result</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flagging-SQL-Join-result/m-p/653185#M196201</link>
      <description>Amazing - i didnt think of using Hash tables, but thinking about it me left table will always be 4 to 5 x bigger than migh right table</description>
      <pubDate>Thu, 04 Jun 2020 12:18:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flagging-SQL-Join-result/m-p/653185#M196201</guid>
      <dc:creator>teelov</dc:creator>
      <dc:date>2020-06-04T12:18:45Z</dc:date>
    </item>
    <item>
      <title>Re: Flagging SQL Join result</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flagging-SQL-Join-result/m-p/653270#M196225</link>
      <description>&lt;P&gt;Thank you for engaging with me on this. really good example to help me using SQL more&lt;/P&gt;</description>
      <pubDate>Thu, 04 Jun 2020 15:42:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flagging-SQL-Join-result/m-p/653270#M196225</guid>
      <dc:creator>teelov</dc:creator>
      <dc:date>2020-06-04T15:42:10Z</dc:date>
    </item>
    <item>
      <title>Re: Flagging SQL Join result</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flagging-SQL-Join-result/m-p/653271#M196226</link>
      <description>&lt;P&gt;over 30M records this ran in under 10 seconds, thank you for your help, very easy to understand and something i can no implement in DI Studio in the Lookup transformation&lt;/P&gt;</description>
      <pubDate>Thu, 04 Jun 2020 15:43:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flagging-SQL-Join-result/m-p/653271#M196226</guid>
      <dc:creator>teelov</dc:creator>
      <dc:date>2020-06-04T15:43:22Z</dc:date>
    </item>
    <item>
      <title>Re: Flagging SQL Join result</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flagging-SQL-Join-result/m-p/653275#M196229</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/23443"&gt;@teelov&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;Amazing - i didnt think of using Hash tables, but thinking about it me left table will always be 4 to 5 x bigger than migh right table&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Anytime you can fit a hash object into memory, it will provide the fastest way to do a join or a lookup (unless the datasets are already sorted and can be read sequentially).&lt;/P&gt;</description>
      <pubDate>Thu, 04 Jun 2020 15:48:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flagging-SQL-Join-result/m-p/653275#M196229</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2020-06-04T15:48:32Z</dc:date>
    </item>
  </channel>
</rss>

