SAS报告总数

时间:2015-02-22 13:44:16

标签: sas

我的数据集看起来与下面的示例有些相似:

ID年大学学位部门状况

12 2014年工程CS MS应用

12 2014年工程CS MS录取

12 2014年工程CS MS注册

88 2013 Engineering ME PHD Applied

88 2013 Engineering ME PHD Admitted

44 2014年工程硕士MS应用

我正在尝试制作一份更像这样的报告:

已申请入学年度

2013 X Y Z

2014 X Y Z

我知道如何过滤College / Dept / Deg的数据集,但是如何使用SAS基本上在列标题中创建字段?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

假设X,Y和Z应该是计数,proc sql对于这类事情很有用。下面,select子句中定义了四列。第一列是year。第二列sum(status='applied')计算表达式status='applied'为真的行数,依此类推接下来的两列。

proc sql;
select year,
       sum(status='Applied') as applied,
       sum(status='Admitted') as admitted,
       sum(status='Enrolled') as enrolled
from yourdata
group by year
;
quit;

您还可以使用proc report,并轻松动态生成列(status中找到的每个值都有一列)。 yeargroup都定义为group个变量。 Across将状态放在列中,而不是为每个状态创建一行:

proc report data=yourdata;
  columns year status;
  define year / group;
  define status / group across;
run;

通过proc freq请求双向频率表,您可以使用year*status获得与此类似的内容。使用norownocolnopercent选项来抑制`proc freq正常吐出的所有垃圾:

proc freq data=yourdata;
  tables year*status / norow nocol nopercent;
run;

或者您可以使用proc tabulate。将yearstatus定义为class变量,以下table语句将为您提供所需的计数:

proc tabulate data=yourdata;
  class year status;
  table year, status*n;
run;