SAS报告总数

SAS报告总数,sas,Sas,我有一个看起来有点类似于以下示例的数据集: ID年大学部学位状态 12 2014工程CS MS应用 12 2014年工程CS MS录取 2014年12月工程CS MS注册 88 2013年工程ME博士学位申请 88 2013年获得工程机械博士学位 44 2014工程CE MS应用 我正试图制作一份更像这样的报告: 申请入学年份 2013 X Y Z 2014 X Y Z 我知道如何过滤College/Dept/Deg的数据集,但如何使用SAS在列标题中创建字段?非常感谢您的帮助。假设X、Y和Z都

我有一个看起来有点类似于以下示例的数据集:

ID年大学部学位状态

12 2014工程CS MS应用

12 2014年工程CS MS录取

2014年12月工程CS MS注册

88 2013年工程ME博士学位申请

88 2013年获得工程机械博士学位

44 2014工程CE MS应用

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

申请入学年份

2013 X Y Z

2014 X Y Z


我知道如何过滤College/Dept/Deg的数据集,但如何使用SAS在列标题中创建字段?非常感谢您的帮助。

假设X、Y和Z都是计数,
proc-sql
非常适合这种情况。下面,在
select
子句中定义了四列。第一列是
。第二列
sum(status='applied')
统计表达式
status='applied'
为true的行数,依此类推

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
中找到的每个值对应一列)<代码>年份和
都定义为
变量<代码>跨越将状态放在列中,而不是为每个状态创建一行:

proc report data=yourdata;
  columns year status;
  define year / group;
  define status / group across;
run;
您只需请求一个带有
year*status
的双向频率表,就可以通过
proc freq
获得类似的结果。使用
norow
nocol
nopercent
选项来抑制“proc freq”正常吐出的所有垃圾:

proc freq data=yourdata;
  tables year*status / norow nocol nopercent;
run;
或者您可以使用
proc tablate
。将
年份
状态
定义为
变量,下面的
语句将为您提供所需的计数:

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

您是否在“结果”窗口中查找数据集或输出?如果是输出,请查看proc freq/TABLATE/report。谢谢您的帮助。最后我把你提到的几乎所有东西都混合起来了。我用procsql获取计数,但使用方式不同,因此我还必须使用PROC TRANSPOSE,然后使用PROC REPORT格式化输出。再次感谢。