SAS Proc Freq-多个变量的每个类别的频率
如何生成包含多个变量的此类信息的表:SAS Proc Freq-多个变量的每个类别的频率,sas,Sas,如何生成包含多个变量的此类信息的表: VARIABLE COUNT PERCENT U 51 94.4444 Y 3 5.5556 这是SAS在我运行此程序时向所有变量的列表输出中吐出的内容: ods output nlevels=nlevels1 OneWayFreqs=freq1 ; proc freq data=sample nlevels ; tables _character_ / out=outfreq1; run
VARIABLE COUNT PERCENT
U 51 94.4444
Y 3 5.5556
这是SAS在我运行此程序时向所有变量的列表输出中吐出的内容:
ods output nlevels=nlevels1 OneWayFreqs=freq1 ;
proc freq data=sample nlevels ;
tables _character_ / out=outfreq1;
run;
在outrequ1
表中,只有数据集中最后一个变量的信息(如上表所示),但不是所有变量的信息。
在nlevels1
表中,有关于每个变量有多少类别的信息,但没有频率数据
我想要的是输出所有变量的频率信息。
有人知道没有宏/循环的方法吗?您基本上有两个选项,这两个选项在您遇到的问题类型上有点类似:使用
PROC tablate
,它更自然地处理多个表输出,或者使用您已经调用的onewayfreqs
输出
这样做的问题是,变量可能有不同的类型,因此它没有一列包含所有这些信息-每个变量都有一对列,这显然有点。。。凌乱的即使您的变量都是相同的类型,SAS也不能假定这是一个一般规则,因此它不会为您产生一个好的整洁的东西
但是,您可以做的是将它们合并成一个结果,特别是如果您能够使用格式化的值(或者是因为希望,或者是因为它们是相同的!)
例如,给定上面的freq1
数据集:
data freq1_out;
set freq1;
value = coalesce(of f_:);
keep table value frequency percent;
run;
将F_u变量组合成一个变量(始终只填充一个变量)。如果您不能使用F_u变量,并且需要原始变量,那么您必须使用宏变量列表(或其他方法,或者只是键入所有名称)来使用coalesce
最后,您可能可以使用procsql
生成一个非常类似的表,尽管如果不使用宏语言,我可能不会这样做UNION-ALL
在这里是一个方便的工具;基本上,每个变量都有单独的子查询,每个子查询都有一个groupby
变量,所以
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;
这当然可以简单地宏观化为
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;
或者更进一步,通过列表处理或宏循环。我的坏,Joe,并不是要创建另一个“答案”。我删除了它,并将您的答案标记为最有用。非常感谢。