我有以下问题 . 我需要在多个变量上运行PROC FREQ,但我希望输出都在同一个表上 . 目前,PROC FREQ声明类似于TABLES ERstatus Age Race,InsuranceStatus;将计算每个变量的频率,并将它们全部打印在不同的表格上 . 我只想要一张 table 上的数据 .
任何帮助,将不胜感激 . 谢谢!
附:我尝试使用PROC TABULATE,但它没有正确计算N,所以我不确定我做错了什么 . 这是我的PROC TABULATE代码 . 我的变量都是绝对的,所以我只需知道N和百分比 .
PROC TABULATE DATA = BCanalysis;
CLASS ERstatus PRstatus Race TumorStage InsuranceStatus;
TABLE (ERstatus PRstatus Race TumorStage) * (N COLPCTN), InsuranceStatus;
RUN;
上述代码不会返回基于InsuranceStatus的正确频率,其中0 =保险,1 =未保险,但PROC FREQ确实如此 . 也无法使用ROWPCTN正确计算 . 因此,我可以通过任何方式获得PROC FREQ来计算一个表上的多个变量,或者PROC TABULATE来返回正确的频率 .
这是一个很好的输出图像,仅对ERstatus和InsuranceStatus进行了简化分析 . 您可以看到PROC FREQ返回204个人,其ERstatus为1,InsuranceStatus为1.这是正确的 . PROC TABULATE中的值不是 . OUTPUT
2 回答
我澄清了我会删除其中一个 .
如果你想在一个打印的表中使用它,那么你需要使用
proc tabulate
或者你需要规范化你的数据 - 意思是把它放在variable | value
的形式 .PROC FREQ
无法在单个表中执行多个单向频率 .对于
PROC TABULATE
,您的问题可能是缺少数据 . 将检查class
语句上的任何变量是否缺失,如果任何行缺少任何类变量的数据,那么这些行将完全从所有变量的列表中排除 .您可以通过在
class
语句或表语句或proc tabulate
语句中添加missing
选项来覆盖此选项 . 所以:这会导致外观与你的 table 略有不同,因为它会包含你可能不想要它们的地方缺少的行,并且当你再次可能不想要它们时,它们将被分解为
colpctn
.通常需要一些操作;最简单的方法是规范化您的数据,然后针对该规范化数据集运行制表(使用
PROC TABULATE
或PROC FREQ
,以较合适者为准;TABULATE
具有更好的百分比选项) .假设我们有这个:
我们希望将这两个表放在一个表中 .
如果我们这样做:
然后我们得到两个子表的总共N = 17 - 这不是我们想要的,我们想要N = 18 . 然后我们可以这样做:
但那也不是正确的;我希望F有8/18 = 44.44%和M 10/18 = 55.55%,而不是42%和53%,5%分配给缺失的行 .
我这样做的方法是规范化数据 . 这意味着您将获得包含2个变量
varname
和val
的数据集,或者您的数据有意义的数据集,以及您可能拥有的任何标识符/人口统计/什么变量 .val
必须是字符,除非您的所有值都是数字 .因此,例如,我使用
age
和sex
变量将class
规范化 . 我没有保留任何标识符,但你肯定可以在你的数据中,我想InsuranceStatus
会保留在那里,如果我理解你在那张表中做了什么 . 一旦我有了规范化的表,我只使用这两个变量,并在proc tabulate
中仔细构造一个分母定义,以便为我的pctn
值提供正确的基础 . 它与之前的单个表不完全相同 - 变量名称在它自己的列中,而不是在值列表的顶部 - 但老实说,在我看来这看起来更好 .如果你想要比这更好的东西,你可能需要在
proc report
中构建它 . 这为您提供了最大的灵活性,但也是最繁重的程序 .您可以使用
ODS OUTPUT
将所有PROC FREQ输出到一个数据集 .要么
Crosstabfreqs
是交叉表输出的名称,而单向频率是onewayfreqs
. 如果您忘记了名称,可以使用ods trace
查找名称 .您可能(可能会)仍然需要操纵此数据集以获得您最终想要的结构 .