我在类变量中对一个副变量的出现进行了简单计数,但找不到重命名类变量总数的方法。此时,输出数据集包括每个组内所有cluster2的计数以及所有组中的总计数(即使用的类变量)。但是,类中的计数被命名,而总数由空字符串显示。
代码:
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-step中完成。这应该是简单而微不足道的,但到目前为止我还没有找到办法。之后,我想转置数据集,这意味着必须更改emtpy字符串,否则它将被删除在proc转置中。
答案 0 :(得分:1)
我不知道直接做到这一点的方法,但是你可以作弊:你可以告诉SAS展示" Total"而不是失踪。
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 TABULATE
代替PROC MEANS
,如果您只是为了计算,但在这种情况下,它并没有真正有太大作用。
答案 1 :(得分:1)
这里的问题是,如果class
语句中的变量是数字,那么结果列将是数字,因此您不能添加单词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 tabulate
几乎可以显示结果,但输出数据集将具有相同的缺失值,因此无法提供帮助。这里有几个例子。
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
,这将删除小计,然后转置数据并最终写入创建总计的数据步骤列每行汇总。这是3个步骤,但不涉及太多编码。
答案 2 :(得分:0)
以下是利用_TYPE_变量可以使用的一种方法,以便您可以单独处理总计和详细信息。如果有一个缺少值的类(与整体摘要记录分开),您仍然会遇到PROC TRANSPOSE问题。
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;