SAS中的Proc Tabulate:重复每行的类名

时间:2013-05-15 18:32:25

标签: sas

如果我想通过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 个答案:

答案 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;
相关问题