<?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: Using Proc SQL to Calculate the Average Time between Purchases for a Customer in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Using-Proc-SQL-to-Calculate-the-Average-Time-between-Purchases/m-p/556556#M155027</link>
    <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thanks noling.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It looks like that's taking the average time between order id and not transaction date&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE style="border-collapse: collapse; width: 192pt;" border="0" width="256" cellspacing="0" cellpadding="0"&gt;
&lt;TBODY&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD width="64" height="19" style="height: 14.4pt; width: 48pt;"&gt;MSTR_CUSTOMER_ID&lt;/TD&gt;
&lt;TD width="64" style="width: 48pt;"&gt;days&lt;/TD&gt;
&lt;TD width="64" style="width: 48pt;"&gt;orders&lt;/TD&gt;
&lt;TD width="64" style="width: 48pt;"&gt;average&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" style="height: 14.4pt;"&gt;46862&lt;/TD&gt;
&lt;TD align="right"&gt;105&lt;/TD&gt;
&lt;TD align="right"&gt;7&lt;/TD&gt;
&lt;TD align="right"&gt;15&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" style="height: 14.4pt;"&gt;54691&lt;/TD&gt;
&lt;TD align="right"&gt;153&lt;/TD&gt;
&lt;TD align="right"&gt;24&lt;/TD&gt;
&lt;TD align="right"&gt;6.375&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" style="height: 14.4pt;"&gt;89553&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;1&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" style="height: 14.4pt;"&gt;92118&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;1&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" style="height: 14.4pt;"&gt;143541&lt;/TD&gt;
&lt;TD align="right"&gt;17&lt;/TD&gt;
&lt;TD align="right"&gt;4&lt;/TD&gt;
&lt;TD align="right"&gt;4.25&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" style="height: 14.4pt;"&gt;144239&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;2&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" style="height: 14.4pt;"&gt;162339&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;1&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;All customer with just one purchase are excluded.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;So if I customer has more than one purchase I'm looking for average time between each distinct&amp;nbsp; transaction date.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE style="border-collapse: collapse; width: 144pt;" border="0" width="192" cellspacing="0" cellpadding="0"&gt;
&lt;TBODY&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD width="64" height="19" class="xl63" style="height: 14.4pt; width: 48pt;"&gt;MSTR_CUSTOMER_ID&lt;/TD&gt;
&lt;TD width="64" class="xl63" style="border-left: none; width: 48pt;"&gt;first_last_diff_pur&lt;/TD&gt;
&lt;TD width="64" class="xl63" style="border-left: none; width: 48pt;"&gt;avg_time_bw_pur&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" class="xl63" style="height: 14.4pt; border-top: none;"&gt;46862&lt;/TD&gt;
&lt;TD align="right" class="xl63" style="border-top: none; border-left: none;"&gt;105&lt;/TD&gt;
&lt;TD align="right" class="xl63" style="border-top: none; border-left: none;"&gt;52.5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" class="xl63" style="height: 14.4pt; border-top: none;"&gt;54691&lt;/TD&gt;
&lt;TD align="right" class="xl63" style="border-top: none; border-left: none;"&gt;153&lt;/TD&gt;
&lt;TD align="right" class="xl63" style="border-top: none; border-left: none;"&gt;25.5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" class="xl63" style="height: 14.4pt; border-top: none;"&gt;143541&lt;/TD&gt;
&lt;TD align="right" class="xl63" style="border-top: none; border-left: none;"&gt;17&lt;/TD&gt;
&lt;TD align="right" class="xl63" style="border-top: none; border-left: none;"&gt;5.666667&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;</description>
    <pubDate>Mon, 06 May 2019 20:13:44 GMT</pubDate>
    <dc:creator>RobertNYC</dc:creator>
    <dc:date>2019-05-06T20:13:44Z</dc:date>
    <item>
      <title>Using Proc SQL to Calculate the Average Time between Purchases for a Customer</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-Proc-SQL-to-Calculate-the-Average-Time-between-Purchases/m-p/556518#M155018</link>
      <description>&lt;P&gt;Hi all,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The mostly Base SAS script below calculates the average time between purchases for a customer based on transaction dates in one variable.&amp;nbsp; What I would like very much to do is rewrite this using &lt;STRONG&gt;just Proc SQL&lt;/STRONG&gt; and to do this &lt;STRONG&gt;all in just one pass&lt;/STRONG&gt;.&amp;nbsp; &amp;nbsp;Here is the full code plus I have broken the script out step by step below.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;proc sort data=have ;
by mstr_customer_id transaction_date order_id ;run;
proc sort data=have  out=purchase (keep=mstr_customer_id order_id transaction_date ) nodupkey;
where transaction_sub_type=1 ;
by mstr_customer_id order_id;
 ;run;
data single multiple;
set purchase;
by mstr_customer_id;
if first.mstr_customer_id=1 and last.mstr_customer_id=1 then output single;
else output multiple;run;
proc sort data=multiple; 
by mstr_customer_id transaction_date;run;
data multiple1;
format first_multiple_td_p last_multiple_td_p ;
set  multiple;
format l_transaction_date date8.;
retain first_multiple_td_p;
by mstr_customer_id transaction_date;
l_transaction_date = lag(transaction_date);
if first.mstr_customer_id then do;
l_transaction_date = .;
date_diff=0;
end;
if not first.mstr_customer_id then do;
date_diff = transaction_date-l_transaction_date;
end;
if first.mstr_customer_id then first_multiple_td_p = transaction_date;
if last.mstr_customer_id then last_multiple_td_p = transaction_date;
if last.mstr_customer_id then first_last_diff_p = last_multiple_td_p-first_multiple_td_p;run;
proc sql;
create table avg_bw_purchase as
select distinct mstr_customer_id,
transaction_date,
date_diff,
first_last_diff_p as first_last_diff_pur,
avg(date_diff) as avg_time_bw_pur 
from multiple1
group by mstr_customer_id;quit;
proc sort data=avg_bw_purchase;
by mstr_customer_id transaction_date;run;
data avg_bw_purchase(drop=date_diff transaction_date);
set avg_bw_purchase;
by mstr_customer_id transaction_date;
if  first_last_diff_pur&amp;gt;=0 then output;run;&lt;/PRE&gt;
&lt;P&gt;Again, I need to &lt;U&gt;rewrite the above his using &lt;STRONG&gt;just Proc SQL&lt;/STRONG&gt; and to do this &lt;STRONG&gt;all in just one pass&lt;/STRONG&gt;&lt;/U&gt;. Thanks!!&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The data I start with looks like this ....&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE width="631"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="138"&gt;MSTR_CUSTOMER_ID&lt;/TD&gt;
&lt;TD width="133"&gt;TRANSACTION_DATE&lt;/TD&gt;
&lt;TD width="198"&gt;ORDER_ID&lt;/TD&gt;
&lt;TD width="162"&gt;TRANSACTION_SUB_TYPE&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;46862&lt;/TD&gt;
&lt;TD&gt;12-Aug-17&lt;/TD&gt;
&lt;TD&gt;00500009201708120000257749&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;46862&lt;/TD&gt;
&lt;TD&gt;12-Aug-17&lt;/TD&gt;
&lt;TD&gt;00500009201708120000257749&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;46862&lt;/TD&gt;
&lt;TD&gt;25-Nov-17&lt;/TD&gt;
&lt;TD&gt;00400027201711250000402816&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;46862&lt;/TD&gt;
&lt;TD&gt;25-Nov-17&lt;/TD&gt;
&lt;TD&gt;00400027201711250000402816&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;46862&lt;/TD&gt;
&lt;TD&gt;25-Nov-17&lt;/TD&gt;
&lt;TD&gt;00400027201711250000402816&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;46862&lt;/TD&gt;
&lt;TD&gt;25-Nov-17&lt;/TD&gt;
&lt;TD&gt;00400027201711250000402816&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;46862&lt;/TD&gt;
&lt;TD&gt;25-Nov-17&lt;/TD&gt;
&lt;TD&gt;00400027201711250000402816&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;10-Jul-17&lt;/TD&gt;
&lt;TD&gt;00100140201707100000271298&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;10-Jul-17&lt;/TD&gt;
&lt;TD&gt;00100140201707100000271298&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;10-Jul-17&lt;/TD&gt;
&lt;TD&gt;00100140201707100000271298&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;10-Jul-17&lt;/TD&gt;
&lt;TD&gt;00100140201707100000271298&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;10-Jul-17&lt;/TD&gt;
&lt;TD&gt;00100140201707100000271299&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;10-Jul-17&lt;/TD&gt;
&lt;TD&gt;00100140201707100000271299&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;10-Jul-17&lt;/TD&gt;
&lt;TD&gt;00100140201707100000271299&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;22-Jul-17&lt;/TD&gt;
&lt;TD&gt;00400140201707220000312323&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;22-Jul-17&lt;/TD&gt;
&lt;TD&gt;00400140201707220000312323&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;22-Jul-17&lt;/TD&gt;
&lt;TD&gt;00700140201707220000397098&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;26-Nov-17&lt;/TD&gt;
&lt;TD&gt;00300140201711260000225399&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;26-Nov-17&lt;/TD&gt;
&lt;TD&gt;00300140201711260000225399&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;26-Nov-17&lt;/TD&gt;
&lt;TD&gt;00300140201711260000225399&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;26-Nov-17&lt;/TD&gt;
&lt;TD&gt;00300140201711260000225399&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;26-Nov-17&lt;/TD&gt;
&lt;TD&gt;00300140201711260000225399&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;89553&lt;/TD&gt;
&lt;TD&gt;7-May-17&lt;/TD&gt;
&lt;TD&gt;00200013201705070000243369&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;92118&lt;/TD&gt;
&lt;TD&gt;26-May-17&lt;/TD&gt;
&lt;TD&gt;00300273201705260000126004&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;143541&lt;/TD&gt;
&lt;TD&gt;28-May-17&lt;/TD&gt;
&lt;TD&gt;00200091201705280000399615&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;143541&lt;/TD&gt;
&lt;TD&gt;28-May-17&lt;/TD&gt;
&lt;TD&gt;00200091201705280000399615&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;143541&lt;/TD&gt;
&lt;TD&gt;12-Jun-17&lt;/TD&gt;
&lt;TD&gt;00100091201706120000361014&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;143541&lt;/TD&gt;
&lt;TD&gt;14-Jun-17&lt;/TD&gt;
&lt;TD&gt;00300091201706140000338020&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;144239&lt;/TD&gt;
&lt;TD&gt;10-Sep-17&lt;/TD&gt;
&lt;TD&gt;00400202201709100000007705&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;144239&lt;/TD&gt;
&lt;TD&gt;10-Sep-17&lt;/TD&gt;
&lt;TD&gt;00400202201709100000007705&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;162339&lt;/TD&gt;
&lt;TD&gt;19-Sep-17&lt;/TD&gt;
&lt;TD&gt;00600092201709190000442273&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Step 1&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;proc sort data=have;
by mstr_customer_id transaction_date order_id ;run;

proc sort data=have out=purchase (keep=mstr_customer_id order_id transaction_date ) nodupkey;
where transaction_sub_type=1 ;
by mstr_customer_id order_id;
;run;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE width="395"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="133"&gt;TRANSACTION_DATE&lt;/TD&gt;
&lt;TD width="64"&gt;MSTR_CUSTOMER_ID&lt;/TD&gt;
&lt;TD width="198"&gt;ORDER_ID&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;12-Aug-17&lt;/TD&gt;
&lt;TD&gt;46862&lt;/TD&gt;
&lt;TD&gt;00500009201708120000257749&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;25-Nov-17&lt;/TD&gt;
&lt;TD&gt;46862&lt;/TD&gt;
&lt;TD&gt;00400027201711250000402816&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;10-Jul-17&lt;/TD&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;00100140201707100000271298&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;10-Jul-17&lt;/TD&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;00100140201707100000271299&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;22-Jul-17&lt;/TD&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;00400140201707220000312323&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;22-Jul-17&lt;/TD&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;00700140201707220000397098&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;26-Nov-17&lt;/TD&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;00300140201711260000225399&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;10-Dec-17&lt;/TD&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;00900140201712100000334607&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;28-May-17&lt;/TD&gt;
&lt;TD&gt;143541&lt;/TD&gt;
&lt;TD&gt;00200091201705280000399615&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;12-Jun-17&lt;/TD&gt;
&lt;TD&gt;143541&lt;/TD&gt;
&lt;TD&gt;00100091201706120000361014&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;14-Jun-17&lt;/TD&gt;
&lt;TD&gt;143541&lt;/TD&gt;
&lt;TD&gt;00300091201706140000338020&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Step #2 :&amp;nbsp;separate multiple purchasers from single purchasers&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;data single multiple;
set purchase;
by mstr_customer_id;
if first.mstr_customer_id=1 and last.mstr_customer_id=1 then output single;
else output multiple;run;
proc sort data=multiple; 
by mstr_customer_id transaction_date;run;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE width="395"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="133"&gt;TRANSACTION_DATE&lt;/TD&gt;
&lt;TD width="64"&gt;MSTR_CUSTOMER_ID&lt;/TD&gt;
&lt;TD width="198"&gt;ORDER_ID&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;12-Aug-17&lt;/TD&gt;
&lt;TD&gt;46862&lt;/TD&gt;
&lt;TD&gt;00500009201708120000257749&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;25-Nov-17&lt;/TD&gt;
&lt;TD&gt;46862&lt;/TD&gt;
&lt;TD&gt;00400027201711250000402816&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;10-Jul-17&lt;/TD&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;00100140201707100000271298&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;10-Jul-17&lt;/TD&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;00100140201707100000271299&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;22-Jul-17&lt;/TD&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;00400140201707220000312323&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;22-Jul-17&lt;/TD&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;00700140201707220000397098&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;26-Nov-17&lt;/TD&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;00300140201711260000225399&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;10-Dec-17&lt;/TD&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;00900140201712100000334607&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;28-May-17&lt;/TD&gt;
&lt;TD&gt;143541&lt;/TD&gt;
&lt;TD&gt;00200091201705280000399615&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;12-Jun-17&lt;/TD&gt;
&lt;TD&gt;143541&lt;/TD&gt;
&lt;TD&gt;00100091201706120000361014&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;14-Jun-17&lt;/TD&gt;
&lt;TD&gt;143541&lt;/TD&gt;
&lt;TD&gt;00300091201706140000338020&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Step #3 :Calculate date_diff &amp;amp; first_last_diff_p&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;data multiple1;
format first_multiple_td_p last_multiple_td_p ;
set  multiple;
format l_transaction_date date8.;
retain first_multiple_td_p;
by mstr_customer_id transaction_date;
l_transaction_date = lag(transaction_date);
if first.mstr_customer_id then do;
l_transaction_date = .;
date_diff=0;
end;
if not first.mstr_customer_id then do;
date_diff = transaction_date-l_transaction_date;
end;
if first.mstr_customer_id then first_multiple_td_p = transaction_date;
if last.mstr_customer_id then last_multiple_td_p = transaction_date;
if last.mstr_customer_id then first_last_diff_p = last_multiple_td_p-first_multiple_td_p;run;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE width="886"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="120"&gt;first_multiple_td_p&lt;/TD&gt;
&lt;TD width="70"&gt;last_multiple_td_p&lt;/TD&gt;
&lt;TD width="133"&gt;TRANSACTION_DATE&lt;/TD&gt;
&lt;TD width="64"&gt;MSTR_CUSTOMER_ID&lt;/TD&gt;
&lt;TD width="198"&gt;ORDER_ID&lt;/TD&gt;
&lt;TD width="138"&gt;l_transaction_date&lt;/TD&gt;
&lt;TD width="64"&gt;date_diff&lt;/TD&gt;
&lt;TD width="99"&gt;first_last_diff_p&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;11-Aug-57&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;12-Aug-17&lt;/TD&gt;
&lt;TD&gt;46862&lt;/TD&gt;
&lt;TD&gt;00500009201708120000257749&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;11-Aug-57&lt;/TD&gt;
&lt;TD&gt;24-Nov-57&lt;/TD&gt;
&lt;TD&gt;25-Nov-17&lt;/TD&gt;
&lt;TD&gt;46862&lt;/TD&gt;
&lt;TD&gt;00400027201711250000402816&lt;/TD&gt;
&lt;TD&gt;12-Aug-17&lt;/TD&gt;
&lt;TD&gt;105&lt;/TD&gt;
&lt;TD&gt;105&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;9-Jul-57&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;10-Jul-17&lt;/TD&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;00100140201707100000271298&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;9-Jul-57&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;10-Jul-17&lt;/TD&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;00100140201707100000271299&lt;/TD&gt;
&lt;TD&gt;10-Jul-17&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;9-Jul-57&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;22-Jul-17&lt;/TD&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;00400140201707220000312323&lt;/TD&gt;
&lt;TD&gt;10-Jul-17&lt;/TD&gt;
&lt;TD&gt;12&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;9-Jul-57&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;22-Jul-17&lt;/TD&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;00700140201707220000397098&lt;/TD&gt;
&lt;TD&gt;22-Jul-17&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;9-Jul-57&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;26-Nov-17&lt;/TD&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;00300140201711260000225399&lt;/TD&gt;
&lt;TD&gt;22-Jul-17&lt;/TD&gt;
&lt;TD&gt;127&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;9-Jul-57&lt;/TD&gt;
&lt;TD&gt;9-Dec-57&lt;/TD&gt;
&lt;TD&gt;10-Dec-17&lt;/TD&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;00900140201712100000334607&lt;/TD&gt;
&lt;TD&gt;26-Nov-17&lt;/TD&gt;
&lt;TD&gt;14&lt;/TD&gt;
&lt;TD&gt;153&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;27-May-57&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;28-May-17&lt;/TD&gt;
&lt;TD&gt;143541&lt;/TD&gt;
&lt;TD&gt;00200091201705280000399615&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;27-May-57&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;12-Jun-17&lt;/TD&gt;
&lt;TD&gt;143541&lt;/TD&gt;
&lt;TD&gt;00100091201706120000361014&lt;/TD&gt;
&lt;TD&gt;28-May-17&lt;/TD&gt;
&lt;TD&gt;15&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;27-May-57&lt;/TD&gt;
&lt;TD&gt;13-Jun-57&lt;/TD&gt;
&lt;TD&gt;14-Jun-17&lt;/TD&gt;
&lt;TD&gt;143541&lt;/TD&gt;
&lt;TD&gt;00300091201706140000338020&lt;/TD&gt;
&lt;TD&gt;12-Jun-17&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;17&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Step #4 :Aggregate&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;proc sql;
create table avg_bw_purchase as
select distinct mstr_customer_id,
transaction_date,
date_diff,
first_last_diff_p as first_last_diff_pur,
avg(date_diff) as avg_time_bw_pur 
from multiple1
group by mstr_customer_id;quit;&lt;/PRE&gt;
&lt;TABLE width="438"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="64"&gt;MSTR_CUSTOMER_ID&lt;/TD&gt;
&lt;TD width="133"&gt;TRANSACTION_DATE&lt;/TD&gt;
&lt;TD width="64"&gt;date_diff&lt;/TD&gt;
&lt;TD width="64"&gt;first_last_diff_pur&lt;/TD&gt;
&lt;TD width="113"&gt;avg_time_bw_pur&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;46862&lt;/TD&gt;
&lt;TD&gt;12Aug2017&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;52.5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;46862&lt;/TD&gt;
&lt;TD&gt;25Nov2017&lt;/TD&gt;
&lt;TD&gt;105&lt;/TD&gt;
&lt;TD&gt;105&lt;/TD&gt;
&lt;TD&gt;52.5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;10Jul2017&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;25.5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;22Jul2017&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;25.5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;22Jul2017&lt;/TD&gt;
&lt;TD&gt;12&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;25.5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;26Nov2017&lt;/TD&gt;
&lt;TD&gt;127&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;25.5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;54691&lt;/TD&gt;
&lt;TD&gt;10Dec2017&lt;/TD&gt;
&lt;TD&gt;14&lt;/TD&gt;
&lt;TD&gt;153&lt;/TD&gt;
&lt;TD&gt;25.5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;143541&lt;/TD&gt;
&lt;TD&gt;28May2017&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;5.666666667&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;143541&lt;/TD&gt;
&lt;TD&gt;12Jun2017&lt;/TD&gt;
&lt;TD&gt;15&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;5.666666667&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;143541&lt;/TD&gt;
&lt;TD&gt;14Jun2017&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;17&lt;/TD&gt;
&lt;TD&gt;5.666666667&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Step #5 :Final&amp;nbsp; - one row for each customer&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;proc sort data=avg_bw_purchase;
by mstr_customer_id transaction_date;run;
data avg_bw_purchase(drop=date_diff transaction_date);
set avg_bw_purchase;
by mstr_customer_id transaction_date;
if  first_last_diff_pur&amp;gt;=0 then output;run;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE style="border-collapse: collapse; width: 144pt;" border="0" width="192" cellspacing="0" cellpadding="0"&gt;
&lt;TBODY&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD width="64" height="19" class="xl65" style="height: 14.4pt; width: 48pt;"&gt;MSTR_CUSTOMER_ID&lt;/TD&gt;
&lt;TD width="64" class="xl65" style="border-left: none; width: 48pt;"&gt;first_last_diff_pur&lt;/TD&gt;
&lt;TD width="64" class="xl65" style="border-left: none; width: 48pt;"&gt;avg_time_bw_pur&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" class="xl65" style="height: 14.4pt; border-top: none;"&gt;46862&lt;/TD&gt;
&lt;TD align="right" class="xl65" style="border-top: none; border-left: none;"&gt;105&lt;/TD&gt;
&lt;TD align="right" class="xl65" style="border-top: none; border-left: none;"&gt;52.5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" class="xl65" style="height: 14.4pt; border-top: none;"&gt;54691&lt;/TD&gt;
&lt;TD align="right" class="xl65" style="border-top: none; border-left: none;"&gt;153&lt;/TD&gt;
&lt;TD align="right" class="xl65" style="border-top: none; border-left: none;"&gt;25.5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" class="xl65" style="height: 14.4pt; border-top: none;"&gt;143541&lt;/TD&gt;
&lt;TD align="right" class="xl65" style="border-top: none; border-left: none;"&gt;17&lt;/TD&gt;
&lt;TD align="right" class="xl65" style="border-top: none; border-left: none;"&gt;5.666667&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Again, any help rewriting this just using Proc SQL and in one pass will be greatly appreciated. Thanks!&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 06 May 2019 18:31:04 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-Proc-SQL-to-Calculate-the-Average-Time-between-Purchases/m-p/556518#M155018</guid>
      <dc:creator>RobertNYC</dc:creator>
      <dc:date>2019-05-06T18:31:04Z</dc:date>
    </item>
    <item>
      <title>Re: Using Proc SQL to Calculate the Average Time between Purchases for a Customer</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-Proc-SQL-to-Calculate-the-Average-Time-between-Purchases/m-p/556534#M155022</link>
      <description>&lt;P&gt;This what you need? I'm dividing between the number of orders, but you may want to do number of orders -1.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;If you have 2 orders 10 days apart do you expect the difference to be 10 days or 10 days/2 orders= 5 days?&amp;nbsp; You can change "count(*)" to "max((count(*) -1, 1)" if desired (not tested). Use the max function so that if there is only 1 order, you don't divide by 0.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
	length MSTR_CUSTOMER_ID 8.	TRANSACTION_DATE 8. ORDER_ID $50. TRANSACTION_SUB_TYPE 8.;
	input MSTR_CUSTOMER_ID TRANSACTION_DATE date11. ORDER_ID TRANSACTION_SUB_TYPE;
	format transaction_date date11.;
datalines;
46862 12-Aug-17 00500009201708120000257749 1
46862 12-Aug-17 00500009201708120000257749 1
46862 25-Nov-17 00400027201711250000402816 1
46862 25-Nov-17 00400027201711250000402816 1
46862 25-Nov-17 00400027201711250000402816 1
46862 25-Nov-17 00400027201711250000402816 1
46862 25-Nov-17 00400027201711250000402816 1
54691 10-Jul-17 00100140201707100000271298 1
54691 10-Jul-17 00100140201707100000271298 1
54691 10-Jul-17 00100140201707100000271298 1
54691 10-Jul-17 00100140201707100000271298 1
54691 10-Jul-17 00100140201707100000271299 1
54691 10-Jul-17 00100140201707100000271299 1
54691 10-Jul-17 00100140201707100000271299 1
54691 22-Jul-17 00400140201707220000312323 1
54691 22-Jul-17 00400140201707220000312323 1
54691 22-Jul-17 00700140201707220000397098 1
54691 26-Nov-17 00300140201711260000225399 1
54691 26-Nov-17 00300140201711260000225399 1
54691 26-Nov-17 00300140201711260000225399 1
54691 26-Nov-17 00300140201711260000225399 1
54691 26-Nov-17 00300140201711260000225399 1
89553 7-May-17  00200013201705070000243369 1
92118 26-May-17 00300273201705260000126004 1
143541 28-May-17 0020009120170528000039961 51
143541 28-May-17 0020009120170528000039961 51
143541 12-Jun-17 0010009120170612000036101 41
143541 14-Jun-17 0030009120170614000033802 01
144239 10-Sep-17 0040020220170910000000770 51
144239 10-Sep-17 0040020220170910000000770 51
162339 19-Sep-17 0060009220170919000044227 31
;;;;
run;

proc sql noprint;
	create table want as
	select MSTR_CUSTOMER_ID, max(TRANSACTION_DATE) - min(TRANSACTION_DATE) as days, count (*) as orders, 
		(max(TRANSACTION_DATE) - min(TRANSACTION_DATE))/count(*) as average
	from have
	group by MSTR_CUSTOMER_ID;
quit;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 06 May 2019 19:47:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-Proc-SQL-to-Calculate-the-Average-Time-between-Purchases/m-p/556534#M155022</guid>
      <dc:creator>noling</dc:creator>
      <dc:date>2019-05-06T19:47:17Z</dc:date>
    </item>
    <item>
      <title>Re: Using Proc SQL to Calculate the Average Time between Purchases for a Customer</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-Proc-SQL-to-Calculate-the-Average-Time-between-Purchases/m-p/556555#M155026</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thanks noling.&amp;nbsp; It looks like that's taking the average time between order id and not transaction date&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE style="border-collapse: collapse; width: 192pt;" border="0" width="256" cellspacing="0" cellpadding="0"&gt;
&lt;TBODY&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD width="64" height="19" style="height: 14.4pt; width: 48pt;"&gt;MSTR_CUSTOMER_ID&lt;/TD&gt;
&lt;TD width="64" style="width: 48pt;"&gt;days&lt;/TD&gt;
&lt;TD width="64" style="width: 48pt;"&gt;orders&lt;/TD&gt;
&lt;TD width="64" style="width: 48pt;"&gt;average&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" style="height: 14.4pt;"&gt;46862&lt;/TD&gt;
&lt;TD align="right"&gt;105&lt;/TD&gt;
&lt;TD align="right"&gt;7&lt;/TD&gt;
&lt;TD align="right"&gt;15&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" style="height: 14.4pt;"&gt;54691&lt;/TD&gt;
&lt;TD align="right"&gt;153&lt;/TD&gt;
&lt;TD align="right"&gt;24&lt;/TD&gt;
&lt;TD align="right"&gt;6.375&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" style="height: 14.4pt;"&gt;89553&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;1&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" style="height: 14.4pt;"&gt;92118&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;1&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" style="height: 14.4pt;"&gt;143541&lt;/TD&gt;
&lt;TD align="right"&gt;17&lt;/TD&gt;
&lt;TD align="right"&gt;4&lt;/TD&gt;
&lt;TD align="right"&gt;4.25&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" style="height: 14.4pt;"&gt;144239&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;2&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" style="height: 14.4pt;"&gt;162339&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;1&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;All customer with just one purchase are excluded.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;So if I customer has more than one purchase I'm looking for average time between each distinct&amp;nbsp; transaction date.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE style="border-collapse: collapse; width: 144pt;" border="0" width="192" cellspacing="0" cellpadding="0"&gt;
&lt;TBODY&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD width="64" height="19" class="xl63" style="height: 14.4pt; width: 48pt;"&gt;MSTR_CUSTOMER_ID&lt;/TD&gt;
&lt;TD width="64" class="xl63" style="border-left: none; width: 48pt;"&gt;first_last_diff_pur&lt;/TD&gt;
&lt;TD width="64" class="xl63" style="border-left: none; width: 48pt;"&gt;avg_time_bw_pur&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" class="xl63" style="height: 14.4pt; border-top: none;"&gt;46862&lt;/TD&gt;
&lt;TD align="right" class="xl63" style="border-top: none; border-left: none;"&gt;105&lt;/TD&gt;
&lt;TD align="right" class="xl63" style="border-top: none; border-left: none;"&gt;52.5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" class="xl63" style="height: 14.4pt; border-top: none;"&gt;54691&lt;/TD&gt;
&lt;TD align="right" class="xl63" style="border-top: none; border-left: none;"&gt;153&lt;/TD&gt;
&lt;TD align="right" class="xl63" style="border-top: none; border-left: none;"&gt;25.5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" class="xl63" style="height: 14.4pt; border-top: none;"&gt;143541&lt;/TD&gt;
&lt;TD align="right" class="xl63" style="border-top: none; border-left: none;"&gt;17&lt;/TD&gt;
&lt;TD align="right" class="xl63" style="border-top: none; border-left: none;"&gt;5.666667&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;</description>
      <pubDate>Mon, 06 May 2019 20:13:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-Proc-SQL-to-Calculate-the-Average-Time-between-Purchases/m-p/556555#M155026</guid>
      <dc:creator>RobertNYC</dc:creator>
      <dc:date>2019-05-06T20:13:00Z</dc:date>
    </item>
    <item>
      <title>Re: Using Proc SQL to Calculate the Average Time between Purchases for a Customer</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-Proc-SQL-to-Calculate-the-Average-Time-between-Purchases/m-p/556556#M155027</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thanks noling.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It looks like that's taking the average time between order id and not transaction date&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE style="border-collapse: collapse; width: 192pt;" border="0" width="256" cellspacing="0" cellpadding="0"&gt;
&lt;TBODY&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD width="64" height="19" style="height: 14.4pt; width: 48pt;"&gt;MSTR_CUSTOMER_ID&lt;/TD&gt;
&lt;TD width="64" style="width: 48pt;"&gt;days&lt;/TD&gt;
&lt;TD width="64" style="width: 48pt;"&gt;orders&lt;/TD&gt;
&lt;TD width="64" style="width: 48pt;"&gt;average&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" style="height: 14.4pt;"&gt;46862&lt;/TD&gt;
&lt;TD align="right"&gt;105&lt;/TD&gt;
&lt;TD align="right"&gt;7&lt;/TD&gt;
&lt;TD align="right"&gt;15&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" style="height: 14.4pt;"&gt;54691&lt;/TD&gt;
&lt;TD align="right"&gt;153&lt;/TD&gt;
&lt;TD align="right"&gt;24&lt;/TD&gt;
&lt;TD align="right"&gt;6.375&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" style="height: 14.4pt;"&gt;89553&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;1&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" style="height: 14.4pt;"&gt;92118&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;1&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" style="height: 14.4pt;"&gt;143541&lt;/TD&gt;
&lt;TD align="right"&gt;17&lt;/TD&gt;
&lt;TD align="right"&gt;4&lt;/TD&gt;
&lt;TD align="right"&gt;4.25&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" style="height: 14.4pt;"&gt;144239&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;2&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" style="height: 14.4pt;"&gt;162339&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;1&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;All customer with just one purchase are excluded.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;So if I customer has more than one purchase I'm looking for average time between each distinct&amp;nbsp; transaction date.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE style="border-collapse: collapse; width: 144pt;" border="0" width="192" cellspacing="0" cellpadding="0"&gt;
&lt;TBODY&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD width="64" height="19" class="xl63" style="height: 14.4pt; width: 48pt;"&gt;MSTR_CUSTOMER_ID&lt;/TD&gt;
&lt;TD width="64" class="xl63" style="border-left: none; width: 48pt;"&gt;first_last_diff_pur&lt;/TD&gt;
&lt;TD width="64" class="xl63" style="border-left: none; width: 48pt;"&gt;avg_time_bw_pur&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" class="xl63" style="height: 14.4pt; border-top: none;"&gt;46862&lt;/TD&gt;
&lt;TD align="right" class="xl63" style="border-top: none; border-left: none;"&gt;105&lt;/TD&gt;
&lt;TD align="right" class="xl63" style="border-top: none; border-left: none;"&gt;52.5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" class="xl63" style="height: 14.4pt; border-top: none;"&gt;54691&lt;/TD&gt;
&lt;TD align="right" class="xl63" style="border-top: none; border-left: none;"&gt;153&lt;/TD&gt;
&lt;TD align="right" class="xl63" style="border-top: none; border-left: none;"&gt;25.5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 14.4pt;"&gt;
&lt;TD height="19" align="right" class="xl63" style="height: 14.4pt; border-top: none;"&gt;143541&lt;/TD&gt;
&lt;TD align="right" class="xl63" style="border-top: none; border-left: none;"&gt;17&lt;/TD&gt;
&lt;TD align="right" class="xl63" style="border-top: none; border-left: none;"&gt;5.666667&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;</description>
      <pubDate>Mon, 06 May 2019 20:13:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-Proc-SQL-to-Calculate-the-Average-Time-between-Purchases/m-p/556556#M155027</guid>
      <dc:creator>RobertNYC</dc:creator>
      <dc:date>2019-05-06T20:13:44Z</dc:date>
    </item>
    <item>
      <title>Re: Using Proc SQL to Calculate the Average Time between Purchases for a Customer</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-Proc-SQL-to-Calculate-the-Average-Time-between-Purchases/m-p/556756#M155120</link>
      <description>&lt;P&gt;I see. You're not interested in items per order, but the number of days between orders (which may contain 1 or 100 items):&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql noprint;
	create table want as
	select distinct a.MSTR_CUSTOMER_ID, 
		   max(TRANSACTION_DATE) - min(TRANSACTION_DATE) as days, 
		   b.orders_per_ID,
		   (max(TRANSACTION_DATE) - min(TRANSACTION_DATE))/b.orders_per_ID as average
	from have as a, (select  MSTR_CUSTOMER_ID, 
			    count (distinct order_id) as orders_per_id
			 from have
		         group by MSTR_CUSTOMER_ID) as b
	where a.MSTR_CUSTOMER_ID = b.MSTR_CUSTOMER_ID

	group by a.MSTR_CUSTOMER_ID
	having orders_per_id &amp;gt; 1
;
quit;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Also, it looks like some of your counts are off. I see that ID 143541 has 3 distinct order ID's, while you have 4. Also you have 153 days for the difference for &lt;SPAN&gt;54691&lt;/SPAN&gt;, while there are only 139 days between&amp;nbsp; 26NOV2017 and 10JUL2017.&lt;/P&gt;</description>
      <pubDate>Tue, 07 May 2019 12:52:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-Proc-SQL-to-Calculate-the-Average-Time-between-Purchases/m-p/556756#M155120</guid>
      <dc:creator>noling</dc:creator>
      <dc:date>2019-05-07T12:52:47Z</dc:date>
    </item>
  </channel>
</rss>

