在SAS

2017-02-10 61 views
0

特殊類型的總結,我有以下數據:在SAS

enter image description here

我想知道有多少獨特的客戶,每年每月都有一定的產品。 列是產品何時「有效」,並且如果客戶更改其尺寸,顏色或產品,或者一年過去了,則會獲得新的一排。我不關心顏色或尺寸,只關心產品的類型。我知道有些方法可以做到這一點,但它們非常乏味。

例如,在2014年第1個月,我想知道有多少獨特的客戶,有產品1,產品2或產品3

Year Month no product 1 no product 2 no product 3 
2014 1   1    0     0 

(只有傑拉德是「有效」的那個時候,他只有產品1

我想有一個這樣的列表所有「有效」年和月。

編輯: 數據:

name from   to  colour size product 
Jenny 15JAN2015 15JAN2016' red  small 1 
Jenny 15JAN2016' 15JAN2017' green big  1 
Jenny 15JAN2017' 15JAN2018' blue big  3 
Bob  05APR2014 05APR2015 blue small 2 
Bob  05APR2015 05APR2016 green small 2 
Gerald 23MAY2013 23DEC2013 red  small 2 
Gerald 23DEC2013 23MAY2014 yellow big  1 
Gerald 23MAY2014 04SEP2014 green big  1 
Gerald 04SEP2014 25DEC2014 red  small 2 
Hope 23MAY2014 04SEP2014 red  small 1 
Hope 04SEP2014 25DEC2014 red  small 1 
Siri 15JAN2016' 15JAN2017' red  small 1 
+0

您的數據是一張圖片。您需要將它設置爲文本,以便剪切並粘貼到程序中。 –

+0

謝謝!現在好嗎? – Erosennin

回答

1

如果展開的原始數據,讓你有每個月客戶持有產品爲一排,那麼它是做一個頻率的簡單的事情計數並轉換結果以獲得所需的格式。我的答案唯一的區別是我已將年份和月份顯示爲1列,因爲它使循環更容易。

/* source data */ 
data have; 
input name $ from_dt :date9. to_dt :date9. colour $ size $ product; 
format from_dt to_dt date9.; 
datalines; 
Jenny 15JAN2015 15JAN2016 red small 1 
Jenny 15JAN2016' 15JAN2017' green big 1 
Jenny 15JAN2017' 15JAN2018' blue big 3 
Bob 05APR2014 05APR2015 blue small 2 
Bob 05APR2015 05APR2016 green small 2 
Gerald 23MAY2013 23DEC2013 red small 2 
Gerald 23DEC2013 23MAY2014 yellow big 1 
Gerald 23MAY2014 04SEP2014 green big 1 
Gerald 04SEP2014 25DEC2014 red small 2 
Hope 23MAY2014 04SEP2014 red small 1 
Hope 04SEP2014 25DEC2014 red small 1 
Siri 15JAN2016' 15JAN2017' red small 1 
; 
run; 

/* expand data to have a row for every month */ 
data temp1; 
format mthyr yymm8.; 
set have; 
do i = 0 to intck('month',intnx('month',from_dt,0),intnx('month',to_dt,0)); 
mthyr = intnx('month',from_dt,i); 
output; 
end; 
run; 

/* count frequencies of products per month */ 
proc freq data=temp1 noprint; 
table mthyr*product/sparse out=temp2; 
run; 

/* transpose data */ 
proc transpose data=temp2 out=want (drop=_:) prefix=product; 
by mthyr; 
id product; 
var count; 
run; 
+0

非常感謝您的回答。這是一個很好的解決方案。這對於大數據集來說將會是很多行,也許是:) – Erosennin

+1

是的,它可能是。如果存儲是一個問題,那麼您可以在展開步驟中創建一個視圖,儘管SA仍然需要處理數據。哈希解決方案可能是一種可能性,但我不太瞭解這些複雜性,所以也許別人可以提出解決方案。 – Longfish

+0

儘管您的解決方案非常好! – Erosennin