多个变量的PROC FREQ组合成一个表

您所在的位置:网站首页 王者荣耀赛季多会结束 多个变量的PROC FREQ组合成一个表

多个变量的PROC FREQ组合成一个表

#多个变量的PROC FREQ组合成一个表| 来源: 网络整理| 查看: 265

我澄清了我会删除其中一个 .

如果你想在一个打印的表中使用它,那么你需要使用 proc tabulate 或者你需要规范化你的数据 - 意思是把它放在 variable | value 的形式 . PROC FREQ 无法在单个表中执行多个单向频率 .

对于 PROC TABULATE ,您的问题可能是缺少数据 . 将检查 class 语句上的任何变量是否缺失,如果任何行缺少任何类变量的数据,那么这些行将完全从所有变量的列表中排除 .

您可以通过在 class 语句或表语句或 proc tabulate 语句中添加 missing 选项来覆盖此选项 . 所以:

PROC TABULATE DATA = BCanalysis; CLASS ERstatus PRstatus Race TumorStage InsuranceStatus/missing; TABLE (ERstatus PRstatus Race TumorStage) * (N COLPCTN), InsuranceStatus; RUN;

这会导致外观与你的 table 略有不同,因为它会包含你可能不想要它们的地方缺少的行,并且当你再次可能不想要它们时,它们将被分解为 colpctn .

通常需要一些操作;最简单的方法是规范化您的数据,然后针对该规范化数据集运行制表(使用 PROC TABULATE 或 PROC FREQ ,以较合适者为准; TABULATE 具有更好的百分比选项) .

假设我们有这个:

data class; set sashelp.class; if _n_=5 then call missing(age); if _n_=3 then call missing(sex); run;

我们希望将这两个表放在一个表中 .

proc freq data=class; tables age sex; run;

如果我们这样做:

proc tabulate data=class; class age sex; tables (age sex),(N colpctn); run;

然后我们得到两个子表的总共N = 17 - 这不是我们想要的,我们想要N = 18 . 然后我们可以这样做:

proc tabulate data=class; class age sex/missing; tables (age sex),(N colpctn); run;

但那也不是正确的;我希望F有8/18 = 44.44%和M 10/18 = 55.55%,而不是42%和53%,5%分配给缺失的行 .

我这样做的方法是规范化数据 . 这意味着您将获得包含2个变量 varname 和 val 的数据集,或者您的数据有意义的数据集,以及您可能拥有的任何标识符/人口统计/什么变量 . val 必须是字符,除非您的所有值都是数字 .

因此,例如,我使用 age 和 sex 变量将 class 规范化 . 我没有保留任何标识符,但你肯定可以在你的数据中,我想 InsuranceStatus 会保留在那里,如果我理解你在那张表中做了什么 . 一旦我有了规范化的表,我只使用这两个变量,并在 proc tabulate 中仔细构造一个分母定义,以便为我的 pctn 值提供正确的基础 . 它与之前的单个表不完全相同 - 变量名称在它自己的列中,而不是在值列表的顶部 - 但老实说,在我看来这看起来更好 .

data class_norm; set class; length val $2; varname='age'; val=put(age,2. -l); if not missing(age) then output; varname='sex'; val=sex; if not missing(sex) then output; keep varname val; run; proc tabulate data=class_norm; class varname val; tables varname=' '*val=' ',n pctn; run;

如果你想要比这更好的东西,你可能需要在 proc report 中构建它 . 这为您提供了最大的灵活性,但也是最繁重的程序 .



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3