<?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: Split multiple join to optimize time in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644834#M192681</link>
    <description>&lt;P&gt;So this table would need roughly 6 million * 70 bytes in memory, less than 500 MB.&lt;/P&gt;
&lt;P&gt;Let's start with the first join:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data call;
set hmaodm.cse_dtl_fact;
if _n_ = 1
then do;
  length
    actv_id $30
    actv_rsltn_otcome_dimid 8
  ;
  declare hash af (dataset:"hmaodm.actv_fact (where=(cse_src_sys_cd in ('CPM')))");
  af.definekey("case_id");
  af.definedata("actv_id","actv_rsltn_otcome_dimid");
  af.definedone();
  call missing(actv_id,actv_rsltn_otcome_dimid);
end;
rc = af.find();
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Sun, 03 May 2020 13:47:19 GMT</pubDate>
    <dc:creator>Kurt_Bremser</dc:creator>
    <dc:date>2020-05-03T13:47:19Z</dc:date>
    <item>
      <title>Split multiple join to optimize time</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644784#M192652</link>
      <description>&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;create table call as&lt;/P&gt;&lt;P&gt;select&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;input(cdf.case_id,best12.) as mbr_pgm_id ,&lt;/P&gt;&lt;P&gt;&amp;nbsp; count(distinct(af.actv_id)) as AttemptedCallsN ,&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; cdf.TOUCH_DT_DIMID&lt;/P&gt;&lt;P&gt;from&amp;nbsp; hmaodm.cse_dtl_fact cdf&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;left join&amp;nbsp; hmaodm.actv_fact af&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;on cdf.case_id = af.case_id&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;and&amp;nbsp; af.cse_src_sys_cd in ('CPM')&lt;/P&gt;&lt;P&gt;left join&amp;nbsp; HMAODM.ref_dim RDA&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;on&amp;nbsp; af.actv_rsltn_otcome_dimid = rda.ref_dimid&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;and&amp;nbsp; rda.ref_nm = 'activityResolutionOutcomeType'&lt;/P&gt;&lt;P&gt;left join HMAODM.CUST_SEG_DIM CSD&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; on CDF.CUST_SEG_DIMID = CSD.CUST_SEG_DIMID&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;where cdf.qual_dt_dimid &amp;gt; 0&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and cdf.touch_dt_dimid&amp;nbsp; = .&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;and rda.ref_cd in (&amp;amp;actv_typ_id.)&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;&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;&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;&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;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;and RDA.ref_cd &amp;lt;&amp;gt; '44'&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; &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; &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; &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;AND CSD.CUST_SEG_NBR IN (&amp;amp;user_defined_policy.)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;AND (CDF.CSE_OPEN_DT_DIMID &amp;lt;= &amp;amp;end_yyyymmdd.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;AND (CDF.CSE_CLOS_DT_DIMID = 99991231 or CDF.CSE_CLOS_DT_DIMID &amp;gt;= &amp;amp;beg_yyyymmdd.))&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;AND CDF.MEDCR_IND_DIMID &amp;lt;&amp;gt;1&lt;/P&gt;&lt;P&gt;group by cdf.case_id,&amp;nbsp; cdf.TOUCH_DT_DIMID;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This multiple join is taking 50+ hours to run. Please help me to optimize it, so that it takes less execution time.&lt;/P&gt;&lt;P&gt;I tried to split the above query as below but the output does not match. Please help! It is urgent .&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;proc sql noprint;&lt;/P&gt;&lt;P&gt;create table call1 as&lt;/P&gt;&lt;P&gt;select&lt;/P&gt;&lt;P&gt;&amp;nbsp; cdf.case_id&amp;nbsp; ,&lt;/P&gt;&lt;P&gt;&amp;nbsp; af.actv_rsltn_otcome_dimid,&lt;/P&gt;&lt;P&gt;&amp;nbsp; count(distinct(actv_id)) as AttemptedCallsN&lt;/P&gt;&lt;P&gt;from&amp;nbsp; CRP_HMAODM.cse_dtl_fact cdf&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; left join&amp;nbsp; CRP_HMAODM.actv_fact af&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; on cdf.case_id = af.case_id&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;and&amp;nbsp; af.cse_src_sys_cd in ('CPM')&lt;/P&gt;&lt;P&gt;where cdf.qual_dt_dimid &amp;gt; 0&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and cdf.touch_dt_dimid&amp;nbsp; IS NULL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AND (CDF.CSE_OPEN_DT_DIMID &amp;lt;= &amp;amp;end_yyyymmdd.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AND (CDF.CSE_CLOS_DT_DIMID = 99991231 or CDF.CSE_CLOS_DT_DIMID &amp;gt;= &amp;amp;beg_yyyymmdd.))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AND CDF.MEDCR_IND_DIMID &amp;lt;&amp;gt;1&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;group by cdf.case_id,af.actv_rsltn_otcome_dimid&lt;/P&gt;&lt;P&gt;order by CDF.case_id&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;proc sql ;&lt;/P&gt;&lt;P&gt;create table call2 as&lt;/P&gt;&lt;P&gt;select distinct CALL1.*&lt;/P&gt;&lt;P&gt;from call1&lt;/P&gt;&lt;P&gt;left join&amp;nbsp; HMAODM.ref_dim RDA&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; on&amp;nbsp; call1.actv_rsltn_otcome_dimid = rda.ref_dimid&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and&amp;nbsp; rda.ref_nm = 'activityResolutionOutcomeType'&lt;/P&gt;&lt;P&gt;where rda.ref_cd in (&amp;amp;actv_typ_id.)&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;&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;&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;&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;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AND RDA.ref_cd &amp;lt;&amp;gt; '44'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;order by call1.case_id&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;proc sql noprint;&lt;/P&gt;&lt;P&gt;create table call3 as&lt;/P&gt;&lt;P&gt;select distinct&lt;/P&gt;&lt;P&gt;CDF.case_id&lt;/P&gt;&lt;P&gt;from CRP_HMAODM.cse_dtl_fact cdf&lt;/P&gt;&lt;P&gt;left join CRP_HMAODM.CUST_SEG_DIM CSD&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;on CDF.CUST_SEG_DIMID = CSD.CUST_SEG_DIMID&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;where&lt;/P&gt;&lt;P&gt;CSD.CUST_SEG_NBR IN (&amp;amp;user_defined_policy.)&lt;/P&gt;&lt;P&gt;order by CDF.case_id&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;proc sort data=call2;by case_id;RUN;&lt;/P&gt;&lt;P&gt;proc sort data=call3;by case_id;RUN;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;data call23;&lt;/P&gt;&lt;P&gt;merge call2 (IN=A)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call3 (IN=B)&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;By case_id;&lt;/P&gt;&lt;P&gt;If A THEN OUTPUT;&lt;/P&gt;&lt;P&gt;RUN;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 02 May 2020 21:07:41 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644784#M192652</guid>
      <dc:creator>nirupama1</dc:creator>
      <dc:date>2020-05-02T21:07:41Z</dc:date>
    </item>
    <item>
      <title>Re: Split multiple join to optimize time</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644788#M192654</link>
      <description>&lt;P&gt;1. It looks like the table &lt;STRONG&gt;rda&lt;/STRONG&gt; is only used for filtering. Why not have an inner join?&lt;/P&gt;
&lt;P&gt;2. It looks like table &lt;STRONG&gt;csd&lt;/STRONG&gt; is not used at all.&lt;/P&gt;
&lt;P&gt;3. What # of records do you anticipate from each table? Are they indexed?&lt;/P&gt;
&lt;P&gt;4. Why not format your code so it can be read without getting a headache? Something like&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;create table CALL as
select 
    input(cdf.CASE_ID,best12.)  as mbr_pgm_id 
  , count(distinct(af.ACTV_ID)) as AttemptedCallsN 
  , cdf.TOUCH_DT_DIMID
from HMAODM.CSE_DTL_FACT                  cdf
       left join  
     HMAODM.ACTV_FACT                     af
       on  cdf.CASE_ID = af.CASE_ID
       and af.CSE_SRC_SYS_CD in ('CPM')
       left join 
    HMAODM.REF_DIM                        rda
      on  af.ACTV_RSLTN_OTCOME_DIMID = rda.REF_DIMID
      and rda.REF_NM                 = 'activityResolutionOutcomeType'
      left join 
    HMAODM.CUST_SEG_DIM                   csd
      on cdf.CUST_SEG_DIMID =  csd.CUST_SEG_DIMID 
where cdf.QUAL_DT_DIMID     &amp;gt;  0
  and cdf.TOUCH_DT_DIMID    =  .
  and rda.REF_CD            in (&amp;amp;actv_typ_id.)                                                                                                                                        
  and rda.REF_CD            &amp;lt;&amp;gt; '44'                                                                                                                                                                 AND CSD.CUST_SEG_NBR IN (&amp;amp;user_defined_policy.)           
  and cdf.CSE_OPEN_DT_DIMID &amp;lt;= &amp;amp;end_yyyymmdd.            
  and cdf.CSE_CLOS_DT_DIMID &amp;gt;= &amp;amp;beg_yyyymmdd.
  and cdf.MEDCR_IND_DIMID   &amp;lt;&amp;gt; 1
group by cdf.CASE_ID, cdf.TOUCH_DT_DIMID;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 02 May 2020 23:57:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644788#M192654</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2020-05-02T23:57:45Z</dc:date>
    </item>
    <item>
      <title>Re: Split multiple join to optimize time</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644789#M192655</link>
      <description>&lt;P&gt;Oh my goodness, table &lt;STRONG&gt;csd&lt;/STRONG&gt;&amp;nbsp; &lt;U&gt;is&lt;/U&gt;&amp;nbsp; used. Except the AND clause is in column 200!&lt;/P&gt;
&lt;P&gt;Do yourself a favour and format your code properly!&lt;/P&gt;
&lt;P&gt;So it looks like table &lt;STRONG&gt;csd&lt;/STRONG&gt; should be an inner join too?&lt;/P&gt;
&lt;P&gt;So maybe try&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt; cdf&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp; inner join&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt; (most discriminating match, rda or csd?)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp; inner join&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;(rda or csd)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp; left join&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;af&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sun, 03 May 2020 00:03:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644789#M192655</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2020-05-03T00:03:35Z</dc:date>
    </item>
    <item>
      <title>Re: Split multiple join to optimize time</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644798#M192658</link>
      <description>&lt;P&gt;Please supply some additional information.&lt;/P&gt;
&lt;P&gt;Are these libraries local SAS libraries, or do you connect to a remote database?&lt;/P&gt;
&lt;P&gt;How many observations do the datasets have, with regard to the subsets you do?&lt;/P&gt;
&lt;P&gt;What are the attributes of the variables you pull (types, lengths)?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You also have stupid storage of dates. Fix that before you even continue.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;input(cdf.case_id,best12.) as mbr_pgm_id&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;is also bad, keep id's in character.&lt;/P&gt;</description>
      <pubDate>Sun, 03 May 2020 07:04:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644798#M192658</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2020-05-03T07:04:26Z</dc:date>
    </item>
    <item>
      <title>Re: Split multiple join to optimize time</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644815#M192667</link>
      <description>These are local sas libraries. I know it is not appropriately written. The conditions are fine, it generates the desired output.&lt;BR /&gt;The actv_fac table is very huge (records in millions).&lt;BR /&gt;There is only need to minimize time.&lt;BR /&gt;I think the issue is with joins. I tried multiple ways but the result is not the same as the original query.</description>
      <pubDate>Sun, 03 May 2020 11:11:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644815#M192667</guid>
      <dc:creator>nirupama1</dc:creator>
      <dc:date>2020-05-03T11:11:19Z</dc:date>
    </item>
    <item>
      <title>Re: Split multiple join to optimize time</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644818#M192669</link>
      <description>Cse_dtl_fact and actv_fac both are very huge tables</description>
      <pubDate>Sun, 03 May 2020 11:17:04 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644818#M192669</guid>
      <dc:creator>nirupama1</dc:creator>
      <dc:date>2020-05-03T11:17:04Z</dc:date>
    </item>
    <item>
      <title>Re: Split multiple join to optimize time</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644820#M192670</link>
      <description>&lt;P&gt;Have you tried inner joins?&lt;/P&gt;
&lt;P&gt;What # of records do you anticipate from each table before and after the joins?&lt;/P&gt;
&lt;P&gt;Are the tables sorted? indexed?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sun, 03 May 2020 11:29:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644820#M192670</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2020-05-03T11:29:14Z</dc:date>
    </item>
    <item>
      <title>Re: Split multiple join to optimize time</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644821#M192671</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/227032"&gt;@nirupama1&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;Cse_dtl_fact and actv_fac both are very huge tables&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;What you call huge might be a little flyspeck for someone else. Please give us the numbers. Not "millions", but 5 millions, 10 millions, and so on. And the sizes of the required variables.&lt;/P&gt;
&lt;P&gt;e. g. how many observations of ACTV_FACT satisfy the condition&lt;/P&gt;
&lt;PRE&gt;CSE_SRC_SYS_CD in ('CPM')&lt;/PRE&gt;
&lt;P&gt;and what are the attributes of CASE_ID and ACTV_ID?&lt;/P&gt;
&lt;P&gt;This will determine if and where we can use in-memory techniques.&lt;/P&gt;</description>
      <pubDate>Sun, 03 May 2020 11:39:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644821#M192671</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2020-05-03T11:39:34Z</dc:date>
    </item>
    <item>
      <title>Re: Split multiple join to optimize time</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644825#M192674</link>
      <description>6 million observations fall under CSE_SRC_SYS_CD in ('CPM') along with where condition.&lt;BR /&gt;If I run the original query by simply removing join with the ref_dim table and where condition of ref_dim table, the output is 55k records.</description>
      <pubDate>Sun, 03 May 2020 12:11:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644825#M192674</guid>
      <dc:creator>nirupama1</dc:creator>
      <dc:date>2020-05-03T12:11:15Z</dc:date>
    </item>
    <item>
      <title>Re: Split multiple join to optimize time</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644826#M192675</link>
      <description>And this run within seconds but as soon as I join with ref_dim table, it executes in about 2days or more and output results in between13k-18k.</description>
      <pubDate>Sun, 03 May 2020 12:14:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644826#M192675</guid>
      <dc:creator>nirupama1</dc:creator>
      <dc:date>2020-05-03T12:14:30Z</dc:date>
    </item>
    <item>
      <title>Re: Split multiple join to optimize time</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644827#M192676</link>
      <description>&lt;P&gt;And what are the lengths of case_id, actv_id and actv_rsltn_otcome_dimid?&lt;/P&gt;</description>
      <pubDate>Sun, 03 May 2020 12:16:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644827#M192676</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2020-05-03T12:16:49Z</dc:date>
    </item>
    <item>
      <title>Re: Split multiple join to optimize time</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644829#M192678</link>
      <description>I am not sure what exactly u mean by length....&lt;BR /&gt;These ids are of 9-10 characters length.&lt;BR /&gt;case_id=9charactets&lt;BR /&gt;actv_id =10 characters&lt;BR /&gt;actv_rsltn_otcome_dimid=maybe negative number or 5-6 digits&lt;BR /&gt;&lt;BR /&gt;</description>
      <pubDate>Sun, 03 May 2020 12:37:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644829#M192678</guid>
      <dc:creator>nirupama1</dc:creator>
      <dc:date>2020-05-03T12:37:03Z</dc:date>
    </item>
    <item>
      <title>Re: Split multiple join to optimize time</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644830#M192679</link>
      <description>&lt;P&gt;Maxim 3: Know Your Data.&lt;/P&gt;
&lt;P&gt;Run PROC CONTENTS on your tables, so you get to know the types and other attributes of your columns.&lt;/P&gt;</description>
      <pubDate>Sun, 03 May 2020 12:40:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644830#M192679</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2020-05-03T12:40:36Z</dc:date>
    </item>
    <item>
      <title>Re: Split multiple join to optimize time</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644831#M192680</link>
      <description>Length&lt;BR /&gt;case_id=30&lt;BR /&gt;actv_id =30&lt;BR /&gt;actv_rsltn_otcome_dimid=8</description>
      <pubDate>Sun, 03 May 2020 12:51:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644831#M192680</guid>
      <dc:creator>nirupama1</dc:creator>
      <dc:date>2020-05-03T12:51:44Z</dc:date>
    </item>
    <item>
      <title>Re: Split multiple join to optimize time</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644834#M192681</link>
      <description>&lt;P&gt;So this table would need roughly 6 million * 70 bytes in memory, less than 500 MB.&lt;/P&gt;
&lt;P&gt;Let's start with the first join:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data call;
set hmaodm.cse_dtl_fact;
if _n_ = 1
then do;
  length
    actv_id $30
    actv_rsltn_otcome_dimid 8
  ;
  declare hash af (dataset:"hmaodm.actv_fact (where=(cse_src_sys_cd in ('CPM')))");
  af.definekey("case_id");
  af.definedata("actv_id","actv_rsltn_otcome_dimid");
  af.definedone();
  call missing(actv_id,actv_rsltn_otcome_dimid);
end;
rc = af.find();
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sun, 03 May 2020 13:47:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644834#M192681</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2020-05-03T13:47:19Z</dc:date>
    </item>
    <item>
      <title>Re: Split multiple join to optimize time</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644930#M192726</link>
      <description>&lt;P&gt;I would be strongly tempted to replace code like&lt;/P&gt;
&lt;PRE&gt;       left join  hmaodm.actv_fact af

       on cdf.case_id = af.case_id

       and  af.cse_src_sys_cd in ('CPM')&lt;/PRE&gt;
&lt;P&gt;with something like&lt;/P&gt;
&lt;PRE&gt;       left join  (select * from hmaodm.actv_fact
                     where cse_src_sys_cd in ('CPM'))  af

       on cdf.case_id = af.case_id
&lt;/PRE&gt;
&lt;P&gt;to reduce the number of records brought into the join. You have opportunities for this at many of your joins&lt;/P&gt;</description>
      <pubDate>Mon, 04 May 2020 08:36:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/644930#M192726</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2020-05-04T08:36:32Z</dc:date>
    </item>
    <item>
      <title>Re: Split multiple join to optimize time</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/645145#M192805</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/13884"&gt;@ballardw&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Doesn't the SQL parser subset the &lt;EM&gt;right&lt;/EM&gt; table when it sees&lt;/P&gt;
&lt;PRE&gt;and  af.cse_src_sys_cd in ('CPM')&lt;/PRE&gt;
&lt;P&gt;?&lt;/P&gt;</description>
      <pubDate>Tue, 05 May 2020 02:36:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/645145#M192805</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2020-05-05T02:36:29Z</dc:date>
    </item>
    <item>
      <title>Re: Split multiple join to optimize time</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/645149#M192809</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/13884"&gt;@ballardw&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Both SQL steps take 4.8s on my machine.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data A(sortedby=I) B(sortedby=I);
  do I=1 to 1e7;
    output;
  end;
run;   
proc sql _method;
  create table T as
  select A.I, b.I as J
  from A left join B on a.I=b.I and b.I=1e7;
quit;
proc sql _method;
  create table T as
  select A.I, b.I as J
  from A left join B(where=(I=1e7)) on a.I=b.I ;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 05 May 2020 03:04:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/645149#M192809</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2020-05-05T03:04:33Z</dc:date>
    </item>
    <item>
      <title>Re: Split multiple join to optimize time</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/645323#M192893</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/16961"&gt;@ChrisNZ&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/13884"&gt;@ballardw&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Both SQL steps take 4.8s on my machine.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data A(sortedby=I) B(sortedby=I);
  do I=1 to 1e7;
    output;
  end;
run;   
proc sql _method;
  create table T as
  select A.I, b.I as J
  from A left join B on a.I=b.I and b.I=1e7;
quit;
proc sql _method;
  create table T as
  select A.I, b.I as J
  from A left join B(where=(I=1e7)) on a.I=b.I ;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Cached data sets?&lt;/P&gt;
&lt;P&gt;I haven't tested the suggestion in a while but when I had some data across network drives sub-setting the data had some positive impact in my environment.&lt;/P&gt;</description>
      <pubDate>Tue, 05 May 2020 14:59:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/645323#M192893</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2020-05-05T14:59:05Z</dc:date>
    </item>
    <item>
      <title>Re: Split multiple join to optimize time</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/645469#M192963</link>
      <description>&lt;P&gt;Interesting. Something to keep one's eyes on then.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It'd be disappointing if the SQL optimiser did not subset the table. That's such an obvious step.&lt;/P&gt;</description>
      <pubDate>Tue, 05 May 2020 23:21:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Split-multiple-join-to-optimize-time/m-p/645469#M192963</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2020-05-05T23:21:57Z</dc:date>
    </item>
  </channel>
</rss>

