你基本上有两种选择,它们在你遇到的问题种类上很相似:使用PROC TABULATE
,这更自然地处理多个表格输出,或者使用已经调用的onewayfreqs
输出对于。
这样做的问题是,变量可能是不同的类型,所以它没有一列包含所有这些信息 - 它有一对每个变量的列,显然有点...乱。即使你的变量都是相同的类型,SAS不能认为这是一般规则,所以它不会为你产生一个好的整洁的东西。
尽管你可以做什么,特别是如果你能够使用格式化值(要么因为想要,要么因为它们是相同的!),将它们合并成一个结果。
例如,假设你从上面的数据集freq1
:
data freq1_out;
set freq1;
value = coalesce(of f_:);
keep table value frequency percent;
run;
,结合了F_变量为一个变量(如永远只有一个是不断填充)。如果你不能使用F_变量并且需要原始变量,那么你必须使用宏变量列表(或者其他一些方法,或者只是输入全部名称)来使用coalesce来创建自己的变量列表。
最后,你可以使用PROC SQL
来产生一个相当类似的表,尽管我可能不会使用宏语言来做。 UNION ALL
在这里是一个方便的工具;基本上你必须为每个变量单独的子查询与group by
变量,所以
proc sql;
create table my_freqs as
select 'HEIGHT' as var, height, count(1) as count
from sashelp.class
group by 1,height
union all
select 'WEIGHT' as var, weight, count(1) as count
from sashelp.class
group by 1,weight
union all
select 'AGE' as var, age, count(1) as count
from sashelp.class
group by 1,age
;
quit;
那当然可以平凡macrotized为类似
proc sql;
create table my_freqs as
%freq(table=sashelp.class,var=height)
union all
%freq(table=sashelp.class,var=weight)
union all
%freq(table=sashelp.class,var=age)
;
quit;
甚至进一步要么与列表处理或宏循环。
来源
2015-10-14 20:37:25
Joe
我的坏,乔,并不意味着要创建另一个“答案”。我将其删除并标记为最有用的答案。谢谢! – Mike