Formatting 设置proc summary中汇总变量的格式

Formatting 设置proc summary中汇总变量的格式,formatting,sas,Formatting,Sas,我使用的是Proc摘要,因为我想使用多标签格式。我一直在反复尝试将一种格式应用于我的摘要输出,但不知道如何在不引起警告的情况下获得这种格式 Proc Summary Data = Source CompleteTypes Missing NoPrint NWay; Class Brand / MLF; Var Id Total; Output Out = Results N(ID) = Volume Sum(Total) = Grand_Tot

我使用的是Proc摘要,因为我想使用多标签格式。我一直在反复尝试将一种格式应用于我的摘要输出,但不知道如何在不引起警告的情况下获得这种格式

Proc Summary Data = Source CompleteTypes Missing NoPrint NWay;
 Class Brand / MLF;

 Var Id Total;

 Output Out = Results
        N(ID)      = Volume
        Sum(Total) = Grand_Total;
Run;
我想将我的卷格式化为Comma23。总计为23.2元。如果我在输出之后放一个format语句,它会警告我变量不存在,但数据集确实应用了格式

我本以为格式化摘要变量是一个常见的操作,但我找不到一种方法来应用它而不得到警告。有什么我遗漏的吗


非常感谢在
proc summary
创建输出数据集后,使用
proc datasets
将该格式应用于输出数据集:

proc datasets lib = work;
  modify results;
  format Volume comma23. Grand_total comma23.2;
  run;
quit;

proc summary
创建输出数据集后,使用
proc datasets
将该格式应用于输出数据集:

proc datasets lib = work;
  modify results;
  format Volume comma23. Grand_total comma23.2;
  run;
quit;

另一种方法是使用proc模板应用该格式。将使用ods输出将格式带入新创建的数据集。使用ods trace on查找(1)要更改的模板名称(2)要输出到数据集中的对象名称。在您的情况下,您需要更改Base.Summary模板并输出Summary对象。当您在proc步骤前运行ods跟踪时,这两个选项都会出现在日志中。这也可以通过其他程序完成。例如,单个表的proc frequency具有模板Base.Freq.OneWayList

/* Create Test Data */
data test (drop = num);
do num = 1 to 100;
    x = ceil(rand('NORMAL', 100, 10));
    output;
end;
run;

/* Check log with ODS Trace On to find template to alter and object to output */
ods trace on;
proc summary data = test sum n mean print;
var x;
run;
ods trace off;

/* Alter the Base.Summary template */
ods path reset;
ods path (PREPEND) WORK.TEMPLATE(UPDATE);

proc template;
edit Base.Summary;
    edit N;
        label = 'Count';
        header = varlabel;  
        format = Comma10.;
    end;
    edit Mean;
        label = 'Average';
        header = varlabel;  
        format = Comma10.;
    end;
    edit Sum;
        label = "Sum";
        header = varlabel;
        format = Comma10.;
    end;
end;
run;

/* Output Results (formatted) from the Proc */
ods output summary = results;
proc summary data = test sum n mean print stackodsoutput;
var x;
run;

另一种方法是使用proc模板应用该格式。将使用ods输出将格式带入新创建的数据集。使用ods trace on查找(1)要更改的模板名称(2)要输出到数据集中的对象名称。在您的情况下,您需要更改Base.Summary模板并输出Summary对象。当您在proc步骤前运行ods跟踪时,这两个选项都会出现在日志中。这也可以通过其他程序完成。例如,单个表的proc frequency具有模板Base.Freq.OneWayList

/* Create Test Data */
data test (drop = num);
do num = 1 to 100;
    x = ceil(rand('NORMAL', 100, 10));
    output;
end;
run;

/* Check log with ODS Trace On to find template to alter and object to output */
ods trace on;
proc summary data = test sum n mean print;
var x;
run;
ods trace off;

/* Alter the Base.Summary template */
ods path reset;
ods path (PREPEND) WORK.TEMPLATE(UPDATE);

proc template;
edit Base.Summary;
    edit N;
        label = 'Count';
        header = varlabel;  
        format = Comma10.;
    end;
    edit Mean;
        label = 'Average';
        header = varlabel;  
        format = Comma10.;
    end;
    edit Sum;
        label = "Sum";
        header = varlabel;
        format = Comma10.;
    end;
end;
run;

/* Output Results (formatted) from the Proc */
ods output summary = results;
proc summary data = test sum n mean print stackodsoutput;
var x;
run;

一些统计信息(如SUM)继承分析变量的格式。N statistics不继承格式,但如果可以使用示例中所示的:技巧,并且不生成警告,则可以格式化新变量

proc summary data=sashelp.class;
   class sex;
   output out=test n(age)=Nage sum(weight)=sum_weight;
   format nage: comma12. weight comma12.3;
   run;
proc contents varnum;
   run;
proc print;
   run;

一些统计信息,如SUM继承分析变量的格式。N statistics不继承格式,但如果可以使用示例中所示的:技巧,并且不生成警告,则可以格式化新变量

proc summary data=sashelp.class;
   class sex;
   output out=test n(age)=Nage sum(weight)=sum_weight;
   format nage: comma12. weight comma12.3;
   run;
proc contents varnum;
   run;
proc print;
   run;

谢谢。我原以为Proc摘要中会有一些内容允许我这样做,但如果没有,这是一个很好的解决方案。谢谢。我原以为Proc摘要中会有一些内容允许我这样做,但如果没有,这是一个很好的解决方案。谢谢。我不知道模板表,知道它真的很有用。谢谢你。我不知道模板表,知道它真的很有用。