我的数据集看起来与下面的示例有些相似:
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基本上在列标题中创建字段?任何帮助表示赞赏。
答案 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
中找到的每个值都有一列)。 year
和group
都定义为group
个变量。 Across
将状态放在列中,而不是为每个状态创建一行:
proc report data=yourdata;
columns year status;
define year / group;
define status / group across;
run;
通过proc freq
请求双向频率表,您可以使用year*status
获得与此类似的内容。使用norow
,nocol
,nopercent
选项来抑制`proc freq正常吐出的所有垃圾:
proc freq data=yourdata;
tables year*status / norow nocol nopercent;
run;
或者您可以使用proc tabulate
。将year
和status
定义为class
变量,以下table
语句将为您提供所需的计数:
proc tabulate data=yourdata;
class year status;
table year, status*n;
run;