2015-10-21 193 views
0

,我有以下數據集:總和每月到每年在SAS

Date  Occupation  Count 
Jan2006  Nurse   15 
Jan2006  Lawyer   2 
Jan2006  Mechanic   3 
Feb2006  Economist  2 
Feb2006  Lawyer   1 
Feb2006  Nurse   5 

的數據都在持續,直到2014年12月有差異的職業和和計數每個職業的方式。我想要做的就是將所有職業的人數統計爲一年。因此,假設上面的數據已全部個月,數我想我的最終數據看起來像這樣:

Date  Occupation Sum 
2006  Nurse   20 
2006  Lawyer  3 
2006  Mechanic  3 
2006  Economist  2 
and so on until Dec2014. 

我嘗試使用first.variable和last.variable如下,但沒有奏效。

data want, 
    set have; 
if first.date and first.Occupation then sum = 0; 
sum+Count; 
if last.date and last.occupation then output; 
run; 

但是,這並沒有給我所需的輸出。我覺得這可以在SQL中輕鬆完成,但不熟悉SQL,我不願意使用它。

在此先感謝您的幫助。

回答

1

由於使用SAS,就可以利用這一事實,優點是程序如proc summary組由一個變量的格式的值。因此,如果您將一個year.格式應用於Date變量,則它會自動按年分組。

data have; 
input Date :monyy7. Occupation $20. Count; 
format date monyy7.; 
datalines; 
Jan2006  Nurse   15 
Jan2006  Lawyer   2 
Jan2006  Mechanic   3 
Feb2006  Economist  2 
Feb2006  Lawyer   1 
Feb2006  Nurse   5 
; 
run; 

proc summary data=have nway; 
class date occupation/order=freq; /* sort by descending sum */ 
format date year.; /* apply year format to date for grouping purposes */ 
var count; 
output out=want (drop=_:) sum=; 
run; 
+0

儘管下面的SQl代碼也工作得很好,但我不得不編寫另一個數據步驟來擺脫重複項。但是這一切都照顧好了。謝謝 :) – user2916331

1

試試這個:

proc sql; 
    create table want as 
    select year(date) as date, occupation,sum(count) as sum from have 
    group by year(date),occupation; 
quit; 
0

在純datasteps和PROC步驟方法,你可以像下面,

data test; 
    infile datalines; 
    input MonYr monyy7. Occupation $ Count; 
    datalines; 
Jan2006  Nurse   15 
Jan2006  Lawyer   2 
Jan2006  Mechanic   3 
Feb2006  Economist  2 
Feb2006  Lawyer   1 
Feb2006  Nurse   5 
; 
run; 

proc sort data=test; 
    by Occupation MonYr Count; 
run; 

data result(drop=MonYr Count); 
    set test; 
    by Occupation MonYr Count; 
    retain Sum 0; 
    if first.Occupation then Sum=Count; 
    else Sum=Sum+Count; 

    if last.Occupation;  
    Date=Year(MonYr); 
run; 

你可以先改變YearMonth值年和執行排序或只是按照我上面的代碼。

+0

這不起作用。 – user2916331

+0

你有沒有試過運行這個?因爲我只是沒有任何問題地運行它。併產生了與您要求的結果相同的結果! – Vishant

+0

你能告訴我什麼是日誌或輸出中的錯誤「This does not work」 – Vishant

0
select substring([date],charindex('2',[date]),len([date])),Occupation,sum([count]) 
    from sas group by substring([date],charindex('2',[date]),len([date])),Occupation