【问题标题】:How do I stack many frequency tables in SAS如何在 SAS 中堆叠多个频率表
【发布时间】:2016-10-07 19:14:10
【问题描述】:

我有一个包含大约 800 个观察值的数据集。我想得到 14 个变量的频率。我想通过形状获得这些变量的频率(一个例子)。有 3 种不同的形状。

这样做的一个例子显然是: 处理频率;表格颜色;按形状;运行;

但是,我不想要 42 个频率表。我想要一个频率表,左侧有 14 个变量的列表。顶部标题将具有 shape1 shape2 shape3 以及其下方每个变量的频率。 看起来我按百分比转置了数据集,然后将它们堆叠在一起。

我有几组需要这样做的组合。我有大约 5 个不同的变量组,我需要使用 3 个不同的组来制作表格(需要大约 15 个表格)。我讨论的第一个示例就是此类组的一个示例。

任何帮助将不胜感激!

【问题讨论】:

  • 查看 proc 列表。这就像类固醇上的 proc freq。
  • @Quentin- 我已经尝试过 proc tabulate,但它对丢失的数据做了一些我不喜欢的事情。如果我观察到一个变量缺少响应,我不希望它完全从表中删除。我仍然希望将观察结果包含在其他变量中。但是,缺失选项包括缺失数据的频率。我也不想要。在 proc tabulate 中有没有办法解决这个问题?
  • @Reeza- 感谢要点。这几乎正​​是我所需要的,但我还需要按组考虑。最好在频率表的列中包含按组变量(例如:按年龄)。不过,我可以为每个按组变量使用单独的表。例如,表 1 可以按形状 1 包含 15 个变量的所有可变频率,第二个表可以按形状 2 包含所有可变频率(等等)

标签: sas frequency


【解决方案1】:

使用proc meansproc transpose。我给你举个例子。您可以添加更多类别。

proc means data=sashelp.class nway n; 
    class sex age;
    output out=class(drop=_freq_ _type_) n=freq;
run;

proc transpose data=class out=class(drop=_name_) prefix=AGE;
    by sex;
    var freq;
    id age;
run;

data class_sum;
    set class;

    array a(*) age:;
    age_sum = sum(of age:);

    do i = 1 to dim(a);
        a(i) = a(i) / age_sum;
    end;
    drop i;
run;

【讨论】:

  • Sozynski,我认为这是可行的。我确实想要以百分比表示的频率。我可以使用数组来创建 Age11-Age16 的总和,然后将每一列除以总和。您是否有更有效的方式将 #s 表示为百分比?
  • 谢谢罗伯特,这真的很有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 2017-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多