Proc报告计算

时间:2013-07-23 12:56:48

标签: sas

我正在学习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中创建一个新列。我做错了什么。

谢谢和问候 阿米特

3 个答案:

答案 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;