我正在学习proc报告,并希望用计算列做一个简单的报告。
这是我的代码:
proc report data = schools nowd;
columns school class maths science total;
define school / group;
define class / display;
define maths / analysis;
define science / analysis;
define total / computed;
compute total;
total = maths + science;
endcomp;
run;
这是我得到的输出:
Schools Class Maths Science total
Airport i 50 41 0
Airport ii 92 53 0
Airport iii 62 60 0
Airport iv 66 61 0
Amrut i 84 58 0
Amrut ii 42 83 0
Amrut iii 53 64 0
Amrut iv 89 100 0
Asia i 42 74 0
Asia ii 48 91 0
Asia iii 75 76 0
Asia iv 46 84 0
任何人都可以解释一下为什么我将total的值设为0.我相信可以在PROC REPORT中创建一个新列。我做错了什么。
谢谢和问候 阿米特
答案 0 :(得分:4)
当使用分析变量计算统计量时,需要复合变量名称。您可以将数学和科学分别称为maths.sum和science.sum。如果您将这些变量保留为显示变量,您也可以在没有复合名称的情况下引用它们。直接引用可以使用 c3 和 c4 ,但是,如果您在COLUMNS语句中更改了这些变量的顺序,它将改变您的计算(只需考虑一些事项)
proc report data = schools nowd;
columns school class maths science total;
define school / group;
define class / display;
define maths / analysis;
define science / analysis;
define total / computed;
compute total;
total = maths.sum + science.sum;
endcomp;
run;
答案 1 :(得分:3)
PROC REPORT计算订单可能令人困惑。基本上,您有一条日志消息,指出“数学”和“科学”缺失,因为它们与报告中发生COMPUTE的点的那些列没有关联。您可以使用_C#_
,其中#
是列号,以便更轻松地引用列。
另外,正如评论中所指出的,当访问分析变量时,您需要通过分析类型来引用它,所以weight.sum而不是权重。
proc report data = sashelp.class nowd;
columns name sex height weight bmi;
define name / group;
define sex / display;
define height / analysis;
define weight / analysis;
define bmi / computed;
compute bmi;
bmi=_c4_/(_c3_**2);
endcomp;
run;
答案 2 :(得分:0)
proc report data = school out= xyz nowd;
columns schools class maths science total;
define schools / group;
define class / display;
define maths / order;
define science / order;
define total / computed;
compute total ;
if maths or science ne . then
total = maths + science ;
endcomp;
run;