计算列百分比sas

计算列百分比sas,sas,percentage,Sas,Percentage,我有以下数据集: Date Occupation Tota_Employed 1/1/2005 Teacher 45 1/1/2005 Economist 76 1/1/2005 Artist 14 2/1/2005 Doctor 26 2/1/2005 Economist 14 2/1/2005 Mathematician 10

我有以下数据集:

Date        Occupation      Tota_Employed
1/1/2005      Teacher         45
1/1/2005      Economist       76
1/1/2005      Artist          14
2/1/2005      Doctor          26
2/1/2005      Economist       14
2/1/2005      Mathematician   10

and so on until November 2014
我想做的是计算一列按职业划分的就业百分比,这样我的数据如下所示:

Date        Occupation      Tota_Employed   Percent_Emp_by_Occupation
1/1/2005      Teacher         45               33.33
1/1/2005      Economist       76               56.29
1/1/2005      Artist          14               10.37
2/1/2005      Doctor          26               52.00
2/1/2005      Economist       14               28.00
2/1/2005      Mathematician   10               20.00
其中,通过将每个日期(月和年)的总就业人数除以每个职业的总就业人数,计算出每个职业的百分比:

教师示例:(45/135)*100,其中135是45+76+14之和

我知道我可以通过proc TABLATE获得一个表,但我想知道是否还有其他过程可以获得它,特别是因为我想将它作为一个单独的数据集


做这件事最好的方法是什么?提前谢谢

答案是回顾过去几天你就这些数据提出的问题,并研究这些答案。你的答案在那里


当你回顾这些答案时,花点时间感谢他们,并为帮助你的人开一张支票。

从日期中提取月份和年份,并创建一个密钥:

data ds;
set ds;
month=month(date);
year=year(date);
key=catx("_",month,year);
run;
按月份水平汇总总额:

Proc sql;
create table month_total as
select key,sum(total_employed) as monthly_total
from ds
group by key;
quit;
使用每月总计更新原始数据:

Proc sql;
create table ds as
select a.*,b.monthly_total
from ds as a left join month_total as b
on a.key=b.key;
quit;
这将产生以下数据集:

日期职业总就业人数每月总就业人数 2005年1月1日教师45 135 2005年1月1日经济学人76 135 2005年1月1日艺术家14 135

最后将百分比计算为:

data ds;
set ds;
percentage=total_employed/monthly_total;
run;
给你:

proc sql;
create table occ2 as 
select
    occ.*,
    total_employed/employed_by_date as percentage_employed_by_date format=percent7.1
from 
    occ     a
    join
    (select 
        date,
        sum(total_employed) as employed_by_date
    from occ
    group by date)  b
        on
        a.date = b.date
;
quit;
生成如下所示的表:

最后一个想法:您可以在一次数据传递中创建此计算所需的所有总计。我查看了您之前询问的有关此数据的问题,并假设您使用了
proc means
按日期和职业汇总初始数据。您也可以在相同的过程中按日期计算总数。我没有您的数据,因此我将用每个SAS安装附带的sashelp.class数据集来说明这个概念

在这个例子中,我想得到按性别和年龄划分的学生总数,但我也想得到按性别划分的学生总数,因为我稍后会计算按性别划分的学生百分比。下面是如何汇总数据并获得两个不同级别汇总的计数

proc summary data=sashelp.class;
class sex age;
types sex sex*age;
var height;
output out=summary (drop=_freq_) n=count;
run;
types
语句标识我的类变量的摘要级别。在这种情况下,我想要的只是性的计数,以及按年龄划分的性的计数。下面是输出的样子

\u TYPE
变量标识汇总级别。性别总计数为
\u类型=2
,而按年龄划分的性别计数为
\u类型=3

然后是一个简单的SQL查询来计算性别中的百分比

proc sql;
create table summary2 as
select
    a.sex,
    a.age,
    a.count,
    a.count/b.count as percent_of_sex format=percent7.1
from
    summary (where=(_type_=3))  a  /* sex * age  */
    join
    summary (where=(_type_=2))  b  /* sex  */
        on
        a.sex = b.sex
;
quit;

非常感谢Nirvik。我的思路是完全相同的,不幸的是我根本不擅长SQL。我想知道这是否也可以在没有Proc-sql的情况下完成。我假设first.variable和last.variable可以被使用,但我就是想不起来。我确实仔细阅读了答案,但这对我想做的事情没有帮助。谢谢你,谢谢你。非常感谢!