在 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;