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
中找到的每个值对应一列)。 year
和 group
都定义为 group
变量。 Across
将状态放在列中而不是为每个状态创建一行:
proc report data=yourdata;
columns year status;
define year / group;
define status / group across;
run;
你可以用 proc freq
得到类似的东西,只需用 year*status
请求双向频率 table。使用 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;
我有一个数据集,看起来有点类似于下面的示例:
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
中找到的每个值对应一列)。 year
和 group
都定义为 group
变量。 Across
将状态放在列中而不是为每个状态创建一行:
proc report data=yourdata;
columns year status;
define year / group;
define status / group across;
run;
你可以用 proc freq
得到类似的东西,只需用 year*status
请求双向频率 table。使用 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;