【问题标题】:SAS Proc Freq - frequency of each category for multiple variablesSAS Proc Freq - 多个变量的每个类别的频率
【发布时间】:2015-10-15 05:07:28
【问题描述】:

如何生成一个包含多个变量的此类信息的表格:

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;

outfreq1 表中,只有数据集中最后一个变量的信息(如上所示),但不是所有变量的信息。 在nlevels1 表中,有每个变量有多少个类别的信息,但没有频率数据。

我想要的是输出所有变量的频率信息。 有人知道没有宏/循环的方法吗?

【问题讨论】:

    标签: sas


    【解决方案1】:

    您基本上有两个选项,它们在您遇到的问题类型上有点相似:使用PROC TABULATE,它更自然地处理多表输出,或者使用onewayfreqs 输出你已经要求了。

    这样做的问题是变量可能是不同的类型,所以它没有一个包含所有信息的列 - 每个变量都有一对列,这显然有点……混乱.即使您的变量都是相同的类型,SAS 也不能将其假定为一般规则,因此它不会为您生成一个漂亮的整洁的东西。

    不过,您可以做的是将它们合并为一个结果,特别是如果您能够使用格式化的值(无论是因为想要,还是因为它们是相同的!)。

    例如,给定上面的 freq1 数据集:

    data freq1_out;
      set freq1;
      value = coalesce(of f_:);
      keep table value frequency percent;
    run;
    

    这将 F_ 变量组合成一个变量(始终只填充一个)。如果您不能使用 F_ 变量并且需要原始变量,则必须使用宏变量列表(或其他方法,或者直接输入名称)创建自己的变量列表才能使用合并。

    最后,您可能会使用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;
    

    这当然可以简单地宏化为类似

    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;
    

    甚至可以进一步使用列表处理或宏循环。

    【讨论】:

    • 我的错,乔,并不是要创造另一个“答案”。我删除了它并将您的答案标记为最有用。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多