假设您在 proc 中使用 output 选项(而不是 ODS OUTPUT),您可以控制该数据集中的内容,如下所示:
proc means data=sashelp.class;
var age;
class sex;
output out=mymeans nmiss= P1= P5= /autoname;
run;
统计名称的完整列表可在PROC MEANS 文档中的“统计关键字”下找到。
您也可以使用 ODS OUTPUT 获得相同的结果(输出格式略有不同)。
ods output summary=mymeans;
ods trace on;
proc means data=sashelp.class nmiss p1 p5;
var age;
class sex;
run;
ods trace off;
ods output close;
ODS TRACE on/off 是显示创建的表的名称(即'summary')。生产中不需要它。在这种情况下,您要求统计信息的方式与向输出窗口要求统计信息的方式相同(在 PROC MEANS 语句中)。
根据您的编辑,您希望它转置(每个统计数据一行)。你不能直接得到那个,但是换位不是很难。
proc means data=sashelp.class nmiss p1 p5;
class sex;
var _numeric_;
output out=mymeans n= mean= nmiss= p1= p5= /autoname ;
run;
data mymeans_out;
set mymeans(drop=_type_ _freq_);
by sex;
array numvars _numeric_;
format var stat $32.;
do _t = 1 to dim(numvars);
var=scan(vname(numvars[_t]),1,'_');
stat=scan(vname(numvars[_t]),-1,'_');
value = numvars[_t];
output;
end;
keep sex var stat value;
run;
这有一些限制。如果您的变量名称中已经包含下划线,var=scan...
则需要重写该行以使用 substr 并找到最后一个下划线,然后var = substr(vname(...),1,position_of_last_underscore)
. Stat 应该没问题,因为它使用 -1(反向)。如果您的变量名称可能超过约 23 个字符,您可能无法再次获得准确的变量名称,因为它可能会被截断或修改。如果是这种情况,那么上面的 ODS OUTPUT 解决方案将为您提供帮助(因为它在附加列中提供了原始变量的名称),但需要做更多的工作才能将该值与截断的名称相关联。
我还删除了_TYPE_
and _FREQ_
,以简化数组定义;如果你需要这些,那么你需要编写一些代码来将它们排除在单独的输出之外,并保留它们。