2015-02-06 71 views
2

我希望能夠執行相同的計數,如果在數據集類似於下面。我找到類似here的東西,但我不確定如何將其轉換爲Enterprise Guide。我想創建一個算多少時間出現有由一年中每個主鍵幾個新列,因此,例如:SAS企業指南計數如果

PrimKey Date 
1   5/4/2014 
2   3/1/2013 
1   10/1/2014 
3   9/10/2014 

是這樣的:

PrimKey 2014 2013 
1   2  0 
2   0  1 
3   1  0 

我希望能使用查詢生成器中計算字段的高級表達式選項,但是如果還有另一種更好的方式,我完全打開。 這裏是我想什麼(失敗):

CASE 
    WHEN Date(t1.DATE) BETWEEN Date(1/1/2014) and Date(12/31/2014) 
    THEN (COUNT(t1.DATE)) 
END 

但這最終只是計算的總日發生而不考慮語句之間我。

回答

3

假設你正在使用查詢生成器,你可以使用類似以下內容:

我不認爲你需要的CASE語句,而是使用YEAR()函數來計算年份和測試它是否等於到2014/2013。等式測試將返回一個1/0,可以將其加總爲每個組的總和。確保在查詢生成器的GROUP BY部分包含PrimKey。

sum(year(t1.date)=2014) as Y2014, 
sum(year(t2.date)=2013) as Y2013, 

,因爲它不是動態的,也就是說,如果你的歲月改變你必須改變你的代碼,並沒有什麼的代碼,如果出現這種情況要麼返回一個錯誤,我不喜歡這種類型的解決方案。更好的解決方案是按年/ PrimKey進行摘要任務,然後使用轉置任務來獲取所需結構中的數據。

+0

這太棒了,非常感謝你!當我添加Y2014時,它拋出錯誤,但我假設這是因爲我把它放在一個計算列中,並且將「作爲計算」添加到最後。我每年都會建立一個不同的計算列,並且效果很好。我不知道這會像sumif一樣工作。再次感謝! – Jamison 2015-02-06 16:51:46

+0

我完全不知道查詢生成器,但動態解決方案是'選擇primkey,year(date),sum(1)'和'group by primkey,calculated year'。但是由於sql不使用'pivot',所以你必須添加一個'proc轉置'作爲第二步。編輯:並重讀您的評論的結束,也許這是你已經建議的相同的東西。 – DWal 2015-02-06 17:00:51