如果我想通过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
答案 0 :(得分: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
程序。它也可以做你想要的。
答案 1 :(得分: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;
答案 2 :(得分: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;
然后打印该数据集。 Tabulate或Summary都将在这里做大致相同的事情,使用你喜欢的任何一个。
答案 3 :(得分:0)
我使用了上面的答案,并没有完全适用于我的应用程序。这是有效的。注意:保留声明中的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;