2013-05-15 1 views
1

Если я хочу суммировать мои данные по class1 и class2 и показать сумму var1, то, что это самый простой код, чтобы получить выходной сигнал, который выглядит как:Proc Tabulate в SAS: повторять имена классов для каждой строки

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 

ответ

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 процедуры. Он может также делать то, что вы хотите.

+0

Можете ли вы изменить это так, чтобы сумма каждой переменной находилась в одной строке? Попытка следовать этому формату для создания сводной таблицы в Excel в конце, и это не работает так хорошо. – vashts85

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; 
0

TABULATE не будет печатать группу класса 1 повторно, насколько я знаю. По умолчанию даже Report Report не будет. Вам придется распечатывать каждую строку с помощью блоков 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; 

Затем распечатайте, что набор данных. Таблицы или резюме будут делать примерно то же самое здесь, использовать то, что вы предпочитаете.

+0

На самом деле он распечатает его, если вы скажете ods output table = mydata; вместо того, чтобы указывать сохранение, потому что это будет зависеть от того, какие резюме вы просили, поэтому, если вы хотите сохранить определенные, тогда это будет выход ods table = mydata (keep = class1 class2 varsum_sum N mean и т. д.); – zazu

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; 

 Смежные вопросы

  • Нет связанных вопросов^_^