2015-10-21 190 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