我有一個表中存儲的評估日期列表,日期列表。從技術上講,在每個評估期間,這兩列分別爲start_date和end_date。 end_date肯定需要使用,但start_date可能不會。我只關心已完成的時間段,因此,例如,2016-01-01至2016-07-01的時間段正在進行中,但尚未完成。所以,它不在桌子上。獲取SAS中各種評估日期的最新累計銷售額
start_date end_date
2012-01-01 2012-07-01
2012-07-01 2013-01-01
2013-01-01 2013-07-01
2013-07-01 2014-01-01
2014-01-01 2014-07-01
2014-07-01 2015-01-01
2015-01-01 2015-07-01
2015-07-01 2016-01-01
我有一個單獨的表按客戶列出的累計銷量,sales_table有三列,CUSTOMER_ID,cumul_sales,TRANSACTION_DATE。例如,假設客戶4793在2014年2月14日購買了價值100美元的物品,2014年3月30日購買價值200美元的物品,2014年7月27日購買價格爲75美元,該表格將包含以下行:
customer_ID cumul_sales transaction_date
4793 100 2014-02-14
4793 300 2014-03-30
4793 375 2014-07-27
現在,對於每個評估日期和每個客戶,我想知道該客戶評估日期的累積銷售額是多少?如果顧客在評估日期之前沒有購買任何東西,那麼根據評估日期,我不希望爲該顧客排行。這將被存儲在一個新的表,稱爲sales_by_eval,與列CUSTOMER_ID,cumul_sales,eval_date。對於上面的示例客戶,我有以下行:
customer_ID cumul_sales eval_date
4793 300 2014-07-01
4793 375 2015-01-01
4793 375 2015-07-01
4793 375 2016-01-01
我能做到這一點,但我希望做它以高效的方式,所以我不必須通過一次數據讀取爲每個評估日期。如果sales_table中有很多行和40個評估日期,那麼對於每次評估日期來說,通過數據讀取40次會是很大的浪費。例如,只有一次讀取數據是否可能?
當前過程的基本思想是每個評估週期循環一次的宏循環。每個循環都有一個數據步驟,用於創建一個新表(每個循環一個表)以檢查每個事務,以查看它是否在相應評估期的end_date之前或之後發生。也就是說,每個表格都包含在評估日期之前或之後發生的所有交易,但不包括之後發生的交易。然後,稍後的數據步驟使用「last」。在評估日期之前只獲取每位客戶的最後一筆交易。最後,所有創建的各種表都放在另一個數據步驟中,並在SET語句中列出。
這是在SAS中,所以SAS可以做的任何事情,包括SQL和宏,對我來說都沒問題。
你能爲我們想象一個數據集嗎?這樣更容易幫助你。 –
請發佈您的當前代碼,因此我們不建議您已經在做的事情並提供一個起點。 – Reeza
您的銷售表是否缺少銷售日期? –