Sas 如何在Proc Means中重命名类变量的总计数
我正在对类变量中by变量的出现次数进行简单计数,但找不到一种方法来重命名跨类变量的总计数。目前,输出数据集包括每个组内所有cluster2的计数以及所有组的总计数(即使用的类变量)。但是,类中的计数是命名的,而总数是用空字符串显示的 代码:Sas 如何在Proc Means中重命名类变量的总计数,sas,grouping,Sas,Grouping,我正在对类变量中by变量的出现次数进行简单计数,但找不到一种方法来重命名跨类变量的总计数。目前,输出数据集包括每个组内所有cluster2的计数以及所有组的总计数(即使用的类变量)。但是,类中的计数是命名的,而总数是用空字符串显示的 代码: proc means data=seeds noprint; class group; by cluster2; id label2; output out=seeds_counts (drop= _type_ _freq_) n(i
proc means data=seeds noprint;
class group;
by cluster2;
id label2;
output out=seeds_counts (drop= _type_ _freq_) n(id)=count;
run;
输出文件的示例:
cluster2 group label2 count
7 area 1 20
7 sa area 1 15
7 sb area 1 5
15 area 15 42
15 sa area 15 18
....
当然,将emtpy字符串重命名为“Total”可以在单独的datastep中完成,但我希望直接在Proc Means步骤中完成。它应该是简单和琐碎的,但我还没有找到一种方法。之后,我想转置数据集,这意味着必须更改emtpy字符串,否则它将在proc transpose中被删除。我不知道直接进行转置的方法,但您可以进行某种欺骗:您可以告诉SAS显示“Total”而不是missing
proc format;
value $MissTotalF
' ' = 'Total'
other = [$CHAR12.];
quit;
proc means data=sashelp.class noprint;
class sex;
id age;
output out=sex_counts (drop= _type_ _freq_) n(age)=count;
format sex $MissTotalF.;
run;
比如说。我还建议,如果只是进行计数,则使用
PROC tablate
而不是PROC MEANS
,尽管在这种情况下,这并没有多大区别。这里的问题是,如果类
语句中的变量是数字,则结果列将是数字,因此,您不能添加单词Total(除非您使用类似于@Joe的答案的格式)。这就是缺少值的原因,因为class
变量可以是数字或字符
下面是一个数值类变量的示例
proc sort data=sashelp.class out=class;
by sex;
run;
proc means data=class noprint;
class age;
by sex;
output out=class_counts (drop= _:) n=count;
run;
使用proc tablate
可以按照您想要的方式显示结果,但是输出数据集将具有相同的缺失值,因此没有真正的帮助。这里有几个例子
proc tabulate data=class out=class_tabulate1 (drop=_:);
class sex age;
table sex*(age all='Total'),n='';
run;
proc tabulate data=class out=class_tabulate2 (drop=_:);
class sex age;
table sex,age*n='' all='Total';
run;
我认为实现最终目标的最佳选择是将
nway
选项添加到proc means
,这将删除小计,然后转置数据,最后编写一个数据步骤,通过对每行求和来创建总计列。这是三个步骤,但不涉及太多的编码。这里有一种方法,您可以利用_TYPE_u变量来使用,这样您就可以分别处理总计和明细。如果有一个类缺少值(与总体摘要记录分开),那么PROC TRANSPOSE仍然会有问题
如果要将总计作为汇总表,请改用PROC TABLATE,而不是PROC MEANS。@Reeza我希望将总计以及同一表中各个组的计数都转换为以后的转置(获得与数据透视excel表相同的排序结果)。这可以使用Proc TABLATE完成吗?我不太熟悉这个过程。这正是PROC TABLATE设计的目的。我想推荐一篇论文,但找不到好的。不过,这里有很多,听起来像是需要报告,所以请使用列表或报告之类的报告过程。或者只是使用数据步骤编写所需的报告。因此,没有单独的步骤就无法处理此问题?为这样一件小事单独增加一个步骤似乎太笨拙了。使用Proc TABLATE可以更好地标记组和总数吗?请查看STACKODS选项,而不是转置。+仅针对我不知道的“drop=\”通配符。
proc means data=sashelp.class noprint;
class sex;
id age;
output out=sex_counts (drop= _freq_ ) n(age)=count;
run;
proc transpose data=sex_counts out=transpose prefix=count_ ;
where _type_=1 ;
id sex ;
var count;
run;
data transpose ;
merge transpose sex_counts(where=(_type_=0) keep=_type_ count);
rename count=count_Total;
drop _type_;
run;