Formatting 设置proc summary中汇总变量的格式
我使用的是Proc摘要,因为我想使用多标签格式。我一直在反复尝试将一种格式应用于我的摘要输出,但不知道如何在不引起警告的情况下获得这种格式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 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摘要中会有一些内容允许我这样做,但如果没有,这是一个很好的解决方案。谢谢。我不知道模板表,知道它真的很有用。谢谢你。我不知道模板表,知道它真的很有用。