<?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: Check if First Time Item Purchased in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Check-if-First-Time-Item-Purchased/m-p/398132#M96255</link>
    <description>&lt;P&gt;Maybe this will work for you?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
Data Input;
  input Acct_num Tran_Amt:dollar6. Tran_DT:mmddyy10. Item_ID:$3.;
  format tran_Dt yymmdd10.;
  datalines;
111 $100 6/1/2014  AAA
111 $200 6/2/2014  AAA
111 $500 6/4/2014  ABC
111 $500 6/10/2014 AAA
111 $100 6/11/2014 CCC
222 $200 6/4/2014  AAA
222 $500 6/4/2014  AAA
222 $600 6/4/2014  AAA
222 $600 6/11/2014 ABC
222 $600 6/19/2014 ABC
222 $600 6/28/2014 CCC
222 $600 6/29/2014 AAA
;
run;

proc sql;
    CREATE TABLE want AS
    SELECT *, (tran_dt = min(tran_dt)) AS first_time_flag
    FROM input
    GROUP BY acct_num, item_id
    ORDER BY acct_num, tran_dt;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Fri, 22 Sep 2017 15:05:05 GMT</pubDate>
    <dc:creator>collinelliot</dc:creator>
    <dc:date>2017-09-22T15:05:05Z</dc:date>
    <item>
      <title>Check if First Time Item Purchased</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Check-if-First-Time-Item-Purchased/m-p/398127#M96254</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;Data Input;
  input Acct_num Tran_Amt:dollar6. Tran_DT:mmddyy10. Item_ID:$3.;
  format tran_Dt yymmdd10.;
  datalines;
111 $100 6/1/2014  AAA
111 $200 6/2/2014  AAA
111 $500 6/4/2014  ABC
111 $500 6/10/2014 AAA
111 $100 6/11/2014 CCC
222 $200 6/4/2014  AAA
222 $500 6/4/2014  AAA
222 $600 6/4/2014  AAA
222 $600 6/11/2014 ABC
222 $600 6/19/2014 ABC
222 $600 6/28/2014 CCC
222 $600 6/29/2014 AAA
;
run;



Proc sort data = input;
by acct_num Tran_Dt Item_ID;
run;



data output(drop =PrevItemID PrevTranDt);
set input;
by acct_num Tran_dt Item_ID;

PrevItemID=lag1(Item_ID);
PrevTranDt = lag1(Tran_DT);

if first.acct_num=1 and first.Item_ID then 
	FirstTimeItemID=1;
else if PrevItemID = Item_ID AND PrevTranDt = Tran_Dt then 
	FirstTimeItemID = 1;
else if PrevItemID = Item_ID AND PrevTranDt ne Tran_Dt then 
	FirstTimeItemID = 0;
else if PrevItemID ne Item_ID then
	FirstTimeItemID = 1;
;
run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Infrequent poster and a bit of a novice, so all help is appreciated!&amp;nbsp; I need to determine if for a given acct_num, if that's the first time that acct_num has purchased an item.&amp;nbsp; What I have works... almost.&amp;nbsp; It fails when an acct_num purchases an item, purchases a different item, then purchases the original&amp;nbsp;item again.&amp;nbsp; If items are purchased on the same day, and it's the first time purchased, they should all be marked as FirstTimeItemID = 1.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I knew this code was "close", but had this limitation, but now it's become an issue.&amp;nbsp; I tried, unsuccessfully, to use an array to store items previously purchased by acct_id, then trying to create a new array at each change in acct_num.&amp;nbsp; I'm not sure if I implemented wrong or if it's possible.&amp;nbsp; I've never used an array so I was flying blind with internet searches.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Sample data and current code is below as well as the results and a column with a "want" to show what I'd like the results to be.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks in advance.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Results.JPG" style="width: 600px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/15365i9A1B44C357E36DDC/image-size/large?v=v2&amp;amp;px=999" role="button" title="Results.JPG" alt="Results.JPG" /&gt;&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 22 Sep 2017 14:58:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Check-if-First-Time-Item-Purchased/m-p/398127#M96254</guid>
      <dc:creator>Fenton007</dc:creator>
      <dc:date>2017-09-22T14:58:38Z</dc:date>
    </item>
    <item>
      <title>Re: Check if First Time Item Purchased</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Check-if-First-Time-Item-Purchased/m-p/398132#M96255</link>
      <description>&lt;P&gt;Maybe this will work for you?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
Data Input;
  input Acct_num Tran_Amt:dollar6. Tran_DT:mmddyy10. Item_ID:$3.;
  format tran_Dt yymmdd10.;
  datalines;
111 $100 6/1/2014  AAA
111 $200 6/2/2014  AAA
111 $500 6/4/2014  ABC
111 $500 6/10/2014 AAA
111 $100 6/11/2014 CCC
222 $200 6/4/2014  AAA
222 $500 6/4/2014  AAA
222 $600 6/4/2014  AAA
222 $600 6/11/2014 ABC
222 $600 6/19/2014 ABC
222 $600 6/28/2014 CCC
222 $600 6/29/2014 AAA
;
run;

proc sql;
    CREATE TABLE want AS
    SELECT *, (tran_dt = min(tran_dt)) AS first_time_flag
    FROM input
    GROUP BY acct_num, item_id
    ORDER BY acct_num, tran_dt;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 22 Sep 2017 15:05:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Check-if-First-Time-Item-Purchased/m-p/398132#M96255</guid>
      <dc:creator>collinelliot</dc:creator>
      <dc:date>2017-09-22T15:05:05Z</dc:date>
    </item>
    <item>
      <title>Re: Check if First Time Item Purchased</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Check-if-First-Time-Item-Purchased/m-p/398134#M96256</link>
      <description>&lt;P&gt;How big is your data?&lt;/P&gt;
&lt;P&gt;Do you want a flag for every person, item?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Your sort needs to be by account number, item and then date.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;Proc sort data = input;
by acct_num  Item_ID tran_dt;
run;

data want;
set input;
by acct_num item_id;

first_flag=0;

if first.item_id then first_flag=1;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 22 Sep 2017 15:07:02 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Check-if-First-Time-Item-Purchased/m-p/398134#M96256</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2017-09-22T15:07:02Z</dc:date>
    </item>
    <item>
      <title>Re: Check if First Time Item Purchased</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Check-if-First-Time-Item-Purchased/m-p/398151#M96263</link>
      <description>I think that will work. I did forget to mention there could be 40MM records I'm working with. Not sure if that will be an issue remerging data. I'm going to test it shortly, but need to pull the large dataset first.</description>
      <pubDate>Fri, 22 Sep 2017 15:47:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Check-if-First-Time-Item-Purchased/m-p/398151#M96263</guid>
      <dc:creator>Fenton007</dc:creator>
      <dc:date>2017-09-22T15:47:57Z</dc:date>
    </item>
    <item>
      <title>Re: Check if First Time Item Purchased</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Check-if-First-Time-Item-Purchased/m-p/398166#M96268</link>
      <description>&lt;P&gt;With that many records, I'd go with Reeza's solution, which will do what you want more efficiently.&lt;/P&gt;</description>
      <pubDate>Fri, 22 Sep 2017 16:22:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Check-if-First-Time-Item-Purchased/m-p/398166#M96268</guid>
      <dc:creator>collinelliot</dc:creator>
      <dc:date>2017-09-22T16:22:42Z</dc:date>
    </item>
    <item>
      <title>Re: Check if First Time Item Purchased</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Check-if-First-Time-Item-Purchased/m-p/398603#M96441</link>
      <description>&lt;P&gt;Thank you!&amp;nbsp; That worked, it seemed really unintuitive...Intuitively I&amp;nbsp;thought tran_dt would need sorted before item_id.&amp;nbsp; I really appreciate the help!&lt;/P&gt;</description>
      <pubDate>Mon, 25 Sep 2017 16:09:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Check-if-First-Time-Item-Purchased/m-p/398603#M96441</guid>
      <dc:creator>Fenton007</dc:creator>
      <dc:date>2017-09-25T16:09:34Z</dc:date>
    </item>
  </channel>
</rss>

