1

如果我想按 class1 和 class2 总结我的数据并显示 var1 的总和,那么获得如下输出的最简单代码是什么:

    Class1  Class2  Var1Sum
    a       x       123
    a       y        34
    a       z       990
    b       y        98

我尝试了以下方法:

proc tabulate data=datasetname;
    class class1 class2;
    var var1;
    table class1,class2,var1*(SUM);
run;

这让我:

    Class1  Class2  Var1Sum
    a       x       123
            y        34
            z       990
    b       y        98
4

4 回答 4

2

一种方法是用于PROC SUMMARY创建结果数据集,然后用于PROC PRINT创建报告:

proc summary nway data=mydata;
   class class1 class2;
   var var1;
   output out=summary(drop=_type_ _freq_) sum=Var1Sum;
run;
proc print data=summary;
run;

我不使用PROC TABULATE自己,但如果您正在寻找仅报告的解决方案,请阅读该PROC REPORT程序。它也可能做你想做的事。

于 2013-05-15T18:47:46.453 回答
1

我不得不假设你的数据......但PROC REPORT擅长总结数据。它有很多选项可以满足您的需求。

data have;
 input class1 $ class2 $ VarSum;
 datalines;
a       x       1
a       x       1
a       x       1
a       y       1
a       y       1
a       z       1
a       z       1
a       z       1
a       z       1
a       z       1
b       y       1
b       y       1
b       x       1
b       x       1
b       x       1
b       x       1
b       x       1
b       x       1
b       x       1
b       z       1
b       z       1
b       z       1
b       z       1
;

proc report data=have nowd;
 column class1 class2 varsum;

 define class1 / group;
 define class2 / group;
 define varsum / sum;
run;
于 2013-05-15T20:44:43.663 回答
0

据我所知,TABULATE 不会重复打印 class1 组。默认情况下,即使报告也不会。你必须使用 COMPUTE 块打印每一行,我想如果你想要它在一块。

但是,您可以根据需要将其导出到数据集:

ods output table=mydata(keep=class1 class2 varsum_sum);
proc tabulate data=have;
class class1 class2;
var varsum;
tables class1*class2,varsum*sum;
run;
ods output close;

然后打印该数据集。制表或摘要在这里都将做大致相同的事情,使用您喜欢的任何一个。

于 2013-05-16T14:17:48.597 回答
0

我使用了上述答案,但它并不能完全适用于我的应用程序。这是有效的。注意:keep 语句中的 N PCTN 将根据您的变量而变化:

    ods output table=mydata(keep=class1 class2 N PctN);
    proc tabulate data=have;
    class class1 class2;
    tables class1*class2,(N PCTN);
    run;
    ods output close;

我要做的只是将它输出到 mydata 并查看您需要保留哪些列,而不是盲目地做。

ods output table=mydata;
    proc tabulate data=have;
    class class1 class2;
    tables class1*class2,(N PCTN)/noprintmiss;
    run;
    ods output close;
于 2016-04-13T19:30:01.593 回答