3

我正在学习 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  

谁能解释一下为什么我将总计的值设为 0。我相信可以在 PROC REPORT 中创建一个新列。我做错了什么。

感谢和问候
阿米特

4

3 回答 3

5

当分析变量已用于计算统计量时,需要复合变量名称。您可以分别将数学和科学引用为 maths.sum 和 science.sum。如果您将这些变量保留为显示变量,您也可以在不使用复合名称的情况下引用它们。可以使用直接引用c3c4,但是,如果您在 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;
于 2013-07-23T21:33:26.487 回答
4

PROC REPORT 计算顺序可能会令人困惑。基本上,您有一条日志消息说缺少“数学”和“科学”,因为在报告中发生计算的地方它们还没有与这些列相关联。您可以使用_C#_where #is column number 来更轻松地引用列。

此外,正如评论中所指出的,在访问分析变量时,您需要按分析类型引用它,因此使用 weight.sum 而不是 weight。

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;
于 2013-07-23T14:09:08.347 回答
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;
于 2013-07-27T07:07:51.563 回答