SAS 报告总数

SAS reporting totals

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

ID 年大学系学位状态

12 2014 工程 CS MS 应用

12 2014 工程 CS MS 录取

12 2014 工程 CS MS 已注册

88 2013 工程 ME PHD 申请

88 2013 工程学硕士 PHD 录取

44 2014 工程 CE MS 应用

我正在尝试生成更像这样的报告:

申请入学的年份

2013 X Y Z

2014 X Y Z

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

假设 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 请求双向频率 table。使用 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;