在 PROC FREQ 中抑制 "Frequency" 文本
Suppress "Frequency" text in PROC FREQ
如何去掉红圈内的方框
代码:
data mydata;
input x y;
datalines;
1 2
3 4
1 5
3 2
;
run;
proc freq data=mydata;
tables x*y /nopercent norow nocol;
run;
我知道如何做到这一点的唯一方法是编辑 PROC FREQ
模板。自 9.3 左右以来,PROC FREQ
已通过 PROC TEMPLATE
重写为基本 table,这很好,因为它允许我们编辑它的几乎所有方面。
我所做的是在显示管理器中右键单击结果树 header - 如下所示:
然后select"Templates"。这将打开模板列表,其中包括您已安装的所有模板(样式模板和 table 模板 - 大多数 PROC 都有一个 table 模板,尽管 msot 没有给您像 PROC FREQ
确实如此)。
然后导航到 Sashelp.Tmplmst(这是大多数预装模板的主要模板商店),然后打开 Base,然后打开 Freq。这为您提供了构成 PROC FREQ
的 table 个模板的列表。
在您的情况下,您想打开 CrossTabFreqs,这就是您正在生成的(交叉表)。您可以通过 运行ning ods trace on;
然后 运行ning 您的代码来识别它;它会在日志中告诉您它使用的模板名称是什么。
打开它,将模板浏览器的内容复制到剪贴板,然后粘贴到新的 window。我们将对其进行修改,将其保存在一个临时位置,并使用它。
将这一行添加到程序的顶部:
ods path work.templat(update) sashelp.tmplmst(read);
这告诉 SAS 两件事:首先,当我们更新或写入模板存储时,在 work
中执行;第二,先在 work
中查找,然后在 sashelp
中查找模板。这样当我们创建新的 CrossTabFreqs
模板时,它将来自 work
.
现在,在程序中查找它定义 Frequency
块的位置。这是您要修改的内容,因为这是 SAS 的说明,告诉它在显示频率时要打印什么(而不是百分比或诸如此类)。它将这样读:
define Frequency;
header = "Frequency";
format = BEST7.;
label = "Frequency Count";
print;
data_format_override;
end;
您想删除 header
。您可以通过以下两种方式之一执行此操作:完全删除 header 行,或者我的首选选项,将其更改为
define Frequency;
header = " ";
format = BEST7.;
label = "Frequency Count";
print;
data_format_override;
end;
然后运行整个程序(包括ods path
语句)。现在,当您在此 SAS session 中使用 PROC FREQ
时,它将没有频率为 table header.
的文本
data mydata;
input x y;
datalines;
1 2
3 4
1 5
3 2
;
run;
/*Write new template to work folder */
ods path work.templat(update) sashelp.tmplmst(read);
/*Remove the "Frequency" header from the template */
proc template;
edit Base.Freq.CrossTabFreqs;
edit frequency;
header="";
end;
end;
run;
proc freq data=mydata;
tables x*y /nopercent norow nocol;
run;
与 SAS 一样,有多个路径可以到达所需的结果。
如果您愿意远离 proc freq
,您可以使用 proc tabulate
获得所需的输出。这提供了一个更简单(和更简洁)的解决方案,并且不需要挖掘冗长且经常令人困惑的 proc template
文档。
proc tabulate data = mydata;
/* Specify the variables to investigate */
class x y;
table
/* Put x in the rows suppress its title and add a total row */
x = "" all = "Total",
/* Put y in the columns, request a total, request frequency count*/
(y all = "Total") * n = "" /
/* Put "x" in the top left box */
box = "x"
/* Put 0 instead of missing */
misstext = "0";
run;
如何去掉红圈内的方框
代码:
data mydata;
input x y;
datalines;
1 2
3 4
1 5
3 2
;
run;
proc freq data=mydata;
tables x*y /nopercent norow nocol;
run;
我知道如何做到这一点的唯一方法是编辑 PROC FREQ
模板。自 9.3 左右以来,PROC FREQ
已通过 PROC TEMPLATE
重写为基本 table,这很好,因为它允许我们编辑它的几乎所有方面。
我所做的是在显示管理器中右键单击结果树 header - 如下所示:
然后select"Templates"。这将打开模板列表,其中包括您已安装的所有模板(样式模板和 table 模板 - 大多数 PROC 都有一个 table 模板,尽管 msot 没有给您像 PROC FREQ
确实如此)。
然后导航到 Sashelp.Tmplmst(这是大多数预装模板的主要模板商店),然后打开 Base,然后打开 Freq。这为您提供了构成 PROC FREQ
的 table 个模板的列表。
在您的情况下,您想打开 CrossTabFreqs,这就是您正在生成的(交叉表)。您可以通过 运行ning ods trace on;
然后 运行ning 您的代码来识别它;它会在日志中告诉您它使用的模板名称是什么。
打开它,将模板浏览器的内容复制到剪贴板,然后粘贴到新的 window。我们将对其进行修改,将其保存在一个临时位置,并使用它。
将这一行添加到程序的顶部:
ods path work.templat(update) sashelp.tmplmst(read);
这告诉 SAS 两件事:首先,当我们更新或写入模板存储时,在 work
中执行;第二,先在 work
中查找,然后在 sashelp
中查找模板。这样当我们创建新的 CrossTabFreqs
模板时,它将来自 work
.
现在,在程序中查找它定义 Frequency
块的位置。这是您要修改的内容,因为这是 SAS 的说明,告诉它在显示频率时要打印什么(而不是百分比或诸如此类)。它将这样读:
define Frequency;
header = "Frequency";
format = BEST7.;
label = "Frequency Count";
print;
data_format_override;
end;
您想删除 header
。您可以通过以下两种方式之一执行此操作:完全删除 header 行,或者我的首选选项,将其更改为
define Frequency;
header = " ";
format = BEST7.;
label = "Frequency Count";
print;
data_format_override;
end;
然后运行整个程序(包括ods path
语句)。现在,当您在此 SAS session 中使用 PROC FREQ
时,它将没有频率为 table header.
data mydata;
input x y;
datalines;
1 2
3 4
1 5
3 2
;
run;
/*Write new template to work folder */
ods path work.templat(update) sashelp.tmplmst(read);
/*Remove the "Frequency" header from the template */
proc template;
edit Base.Freq.CrossTabFreqs;
edit frequency;
header="";
end;
end;
run;
proc freq data=mydata;
tables x*y /nopercent norow nocol;
run;
与 SAS 一样,有多个路径可以到达所需的结果。
如果您愿意远离 proc freq
,您可以使用 proc tabulate
获得所需的输出。这提供了一个更简单(和更简洁)的解决方案,并且不需要挖掘冗长且经常令人困惑的 proc template
文档。
proc tabulate data = mydata;
/* Specify the variables to investigate */
class x y;
table
/* Put x in the rows suppress its title and add a total row */
x = "" all = "Total",
/* Put y in the columns, request a total, request frequency count*/
(y all = "Total") * n = "" /
/* Put "x" in the top left box */
box = "x"
/* Put 0 instead of missing */
misstext = "0";
run;