跳转至

简介

单组单个定性指标的分析,输出频数、构成比(率)指标。

语法

必选参数

可选参数

调试参数

参数说明

INDATA

Syntax : <libname.>dataset(dataset-options)

指定用于定性分析的数据集,可包含数据集选项

libname: 数据集所在的逻辑库名称

dataset: 数据集名称

dataset-options: 数据集选项,兼容 SAS 系统支持的所有数据集选项

Usage :

INDATA = ADSL
INDATA = SHKY.ADSL
INDATA = SHKY.ADSL(where = (FAS = "Y"))

Example


VAR

Syntax :

  • variable
  • variable("category-1" = "note-1" <, "category-2" ="note-2", ...>)

指定定性分析的变量。

category 表示重命名前的分类名称,note 表示重命名后的分类名称。重命名后的分类名称仅作为输出数据集中该分类显示的名称,实际输出的统计量结果仍然是按照重命名前的分类名称进行计算的。例如:

VAR = SEX("男" = "Male", "女" = "Female")

[!WARNING]

  • 参数 VAR 不允许指定不存在于参数 INDATA 指定的数据集中的变量;
  • 参数 VAR 不允许指定数值型变量;

Usage :

VAR = SEX

Example


BY

Syntax :

  • FREQ<(ASC\<ENDING> | DESC\)>

  • variable<(ASC\<ENDING> | DESC\)>
  • format<(ASC\<ENDING> | DESC\)>

指定各分类在输出数据集中的排列顺序依据。

Default : #FREQ(DESCENDING)

默认情况下,各分类按照频数从大到小排列,频数较大的分类将显示在输出数据集中靠前的位置。

当指定一个输出格式作为排序依据时,该输出格式应当使用 VALUE 语句生成,例如:

proc format;
    value sexn
        1 = "男"
        2 = "女";
run;

宏程序将根据格式化之前的数值对各分类进行排序。

[!IMPORTANT]

  • 若参数 BY 指定了基于某个输出格式进行排序,则该格式必须是 CATALOG-BASED,即在 DICTIONARY.FORMATS 表中,变量 source 的值应当是 C

Usage :

BY = #freq
BY = SEXN(asc)
BY = SEXN.(descending)

Example


UID

Syntax : variable

指定唯一标识符变量。宏程序将根据参数 UID 指定的变量,对分析数据集统计频数和频次,UID 的值通常是能够标识观测所属试验对象的变量,例如:USUBJID

Default : #NULL

默认情况下,宏程序将分析数据集中的每一条观测都视为不同试验对象的观测结果,在这种情况下,输出数据集中的频数和频次计算结果相同。

[!IMPORTANT]

  • 由于默认不输出频次统计结果,因此还需要在参数 OUTDATA 中通过数据集选项指定显示频次统计结果,例如:OUTDATA = T1(KEEP = ITEM VALUE TIMES)

Usage :

UID = USUBJID

Example


PATTERN

Syntax : <string(s)>#statistic-keyword-1<string(s)><#statistic-keyword-2<string(s)>><...>

指定需计算的统计量及统计量的输出模式,输出模式定义了统计量是如何进行组合的,以及统计量在输出数据集中的位置。

其中,statistic-keyword 可以指定以下统计量:

统计量 含义
RATE 构成比(率)
N 频数

string(s) 可以是任意字符(串),若字符串含有字符 #,则使用 ## 进行转义。

Default : %nrstr(#N(#RATE))

Usage :

PATTERN = #N
PATTERN = #N[#RATE]##

Example


MISSING

Syntax : TRUE | FALSE

指定是否统计缺失分类。

Default : FALSE

默认情况下,宏程序不统计缺失分类的频数和频率。

Usage :

MISSING = TRUE

Example


MISSING_NOTE

Syntax : string

指定缺失分类的的说明文字,该字符串必须使用匹配的单(双)引号包围。

如果指定的 MISSING_NOTE 中含有不匹配的引号,例如,需要指定 MISSING_NOTE 为一个单引号,可以选择以下传参方式:

MISSING_NOTE = "'"

但不能使用以下传参方式:

MISSING_NOTE = ''''

这与通常情况下被成对的单引号包围的内部连续两个单引号被视为一个单引号的语法略有不同。

Default : "缺失"

Usage :

MISSING_NOTE = "缺失-n(%)"

Example


MISSING_POSITION

Syntax : FIRST | LAST

指定缺失分类在输出数据集中显示的位置。FIRST 表示显示在所有分类前面,LAST 表示显示在所有分类后面。

当指定 MISSING = FALSE 时,该参数将被忽略。

Default : LAST

Usage :

MISSING_POSITION = FIRST

Example


OUTDATA

Syntax : <libname.>dataset(dataset-options)

指定统计结果输出的数据集,可包含数据集选项,用法同参数 INDATA

输出数据集含有以下变量:

变量名 含义
SEQ 行号
ITEM 分类名称(展示名称)
VALUE 统计量在 PATTERN 指定的模式下的值
FREQ 频数
FREQ_FMT 频数格式化值
N1 频数
N_FMT1 频数格式化值
TIMES 频次
TIMES_FMT 频次格式化值
RATE 频率
RATE_FMT 频率格式化值

[!IMPORTANT]

1 建议改用 FREQ, FREQ_FMT,保留 N, N_FMT 仅为兼容旧版本程序,未来的版本 (v1.5+) 可能不受支持;

其中:

  • 若指定参数 UID = #NULL (空值),则默认输出变量 ITEMVALUE
  • 若指定参数 UID = variable,则默认输出变量 ITEM, VALUETIMES_FMT

Default : #AUTO

默认情况下,输出数据集被命名为 RES_var,其中 var 为参数 VAR 指定的变量的名称。

[!TIP]

  • 如需显示隐藏的变量,可使用数据集选项实现,例如:OUTDATA = T1(KEEP = SEQ ITEM VALUE FREQ TIMES)

Usage :

OUTDATA = T1
OUTDATA = T1(KEEP = SEQ ITEM VALUE FREQ TIMES)

Example

See Also :


STAT_FORMAT

Syntax : <(> #statistic-keyword-1 = format-1 <, #statistic-keyword-2 = format-2 <, ...>><)>

指定输出结果中统计量的输出格式。

其中,statistic-keyword 可以指定以下统计量:

统计量 含义 默认值
FREQ 频数 BEST.
N1 频数 BEST.
TIMES 频次 BEST.
RATE 构成比(率) PERCENTN9.2
TS 2 检验统计量 #AUTO 3
P 2 假设检验 P 值 #AUTO 4

[!IMPORTANT]

  • 1 建议改用 FREQ,保留 N 仅为兼容旧版本程序,未来的版本 (v1.5+) 可能不受支持;

  • 2 仅在宏 %qualify_multi_test 中可用;

  • 3 检验统计量输出格式的默认值为 w.d,其中:

  • w = \(\max(\lceil\log_{10}\left|s\right|\rceil, 1) + 6\)\(s\) 表示检验统计量的值

  • d = 4

  • 4 假设检验 P 值输出格式的默认值为 qlmt_pvalue.qlmt_pvalue. 由以下 PROC FORMAT 过程定义:

proc format;
    picture qlmt_pvalue(round  max = 7)
            low - < 0.0001 = "<0.0001"(noedit)
            other = "9.9999";
run;

Usage :

STAT_FORMAT = (#N = z4., #RATE = percentn9.2)
STAT_FORMAT = (#RATE = qual., #TS = 8.4, #P = pv.)

Example


LABEL

Syntax : string

指定输出结果中第一行显示的标签字符串,该字符串必须使用匹配的单(双)引号包围。

如果指定的 LABEL 中含有不匹配的引号,例如,需要指定 LABEL 为一个单引号,可以选择以下传参方式:

LABEL = "'"

但不能使用以下传参方式:

LABEL = ''''

这与通常情况下被成对的单引号包围的内部连续两个单引号被视为一个单引号的语法略有不同。

Default : #AUTO

默认情况下,宏程序将自动获取变量 VAR 的标签,若标签为空,则使用变量 VAR 的变量名作为标签。

Usage :

LABEL = "性别-n(%)"

Example


INDENT

Syntax : string

指定输出结果各分类的缩进字符串,该字符串必须使用匹配的单(双)引号包围。

如果指定的 INDENT 中含有不匹配的引号,例如,需要指定 INDENT 为一个单引号,可以选择以下传参方式:

INDENT = "'"

但不能使用以下传参方式:

INDENT = ''''

这与通常情况下被成对的单引号包围的内部连续两个单引号被视为一个单引号的语法略有不同。

Default : #AUTO

默认情况下,各分类前使用 4 个英文空格作为缩进字符。

[!TIP]

  • 可以使用 RTF 控制符控制缩进,例如:五号字体下缩进 2 个中文字符,可指定参数 INDENT = "\li420 "

Usage :

INDENT = "\li420 "

Example


SUFFIX

Syntax : string

指定输出结果各分类名称的后缀,该字符串必须使用匹配的单(双)引号包围。

如果指定的 SUFFIX 中含有不匹配的引号,例如,需要指定 SUFFIX 为一个单引号,可以选择以下传参方式:

SUFFIX = "'"

但不能使用以下传参方式:

SUFFIX = ''''

这与通常情况下被成对的单引号包围的内部连续两个单引号被视为一个单引号的语法略有不同。

Default : #AUTO

默认情况下,各分类名称不添加后缀。

Usage :

SUFFIX = ",n(%)"

Example


TOTAL

Syntax : TRUE | FALSE

指定是否在标签行输出各分类合计的统计结果。

Default : FALSE

默认情况下,标签行仅显示参数 LABEL 指定的字符串,不显示各分类合计的统计结果。

Usage :

TOTAL = TRUE

Example


DEL_TEMP_DATA

Syntax : TRUE | FALSE

指定是否删除宏程序运行过程生成的中间数据集。

Default : TRUE

默认情况下,宏程序会自动删除运行过程生成的中间数据集。

[!NOTE]

此参数用于开发者调试,一般无需关注。


例子

打开帮助文档

%qualify();
%qualify(help);

一般用法

%qualify(indata = adam.adsl(where = (FASFL = "Y")), var = ecgcsig);

%qualify(indata = adam.adsl(where = (FASFL = "Y")), var = ecgcsig("异常无临床意义" = "NCS", "异常有临床意义" = "CS"));

指定统计量的输出模式

%qualify(indata = adam.adsl(where = (FASFL = "Y")), var = ecgcsig, pattern = %str(#n[#rate]##));

上述例子中,使用参数 PATTERN 改变了默认的统计量输出模式,构成比使用中括号[]包围,结尾使用 ### 进行转义。

指定分类排序方式

%qualify(indata = adam.adsl(where = (FASFL = "Y")), var = ecgcsig, by = #freq(desc));

%qualify(indata = adam.adsl(where = (FASFL = "Y")), var = ecgcsig, by = ecgcsign);

%qualify(indata = adam.adsl(where = (FASFL = "Y")), var = ecgcsig, by = clsig.);

输出格式 clsig. 包含的具体分类如下:

指定唯一标识符变量

%qualify(indata = adam.addv(where = (FASFL = "Y")),
         var = dvtype,
         uid = usubjid,
         outdata = t1(keep = item value freq times));

指定是否统计缺失分类

%qualify(indata = adam.adsl(where = (FASFL = "Y")),
         var = ecgcsig,
         by = clsig.,
         missing = true);

指定缺失分类的说明文字

%qualify(indata = adam.adsl(where = (FASFL = "Y")),
         var = ecgcsig,
         by = clsig.,
         missing = true,
         missing_note = "不适用");

指定缺失分类的显示位置

%qualify(indata = adam.adsl(where = (FASFL = "Y")),
         var = ecgcsig,
         by = clsig.,
         missing = true,
         missing_note = "不适用",
         missing_position = first);

指定需要保留的变量

%qualify(indata = adam.adsl(where = (FASFL = "Y")),
         var = ecgcsig,
         by = clsig.,
         missing = true,
         outdata = t1(keep = seq item value n rate));

指定统计量的输出格式

%qualify(indata = adam.adsl(where = (FASFL = "Y")),
        var = ecgcsig,
        by = clsig.,
        missing = true,
        stat_format = (#N = z4., #RATE = 5.3));

指定分析变量标签

%qualify(indata = adam.adsl(where = (FASFL = "Y")),
         var = ecgcsig,
         by = clsig.,
         missing = true,
         label = "ECG 临床意义判定-n(%)");

指定缩进字符串

%qualify(indata = adam.adsl(where = (FASFL = "Y")),
         var = ecgcsig,
         by = clsig.,
         missing = true,
         label = "ECG 临床意义判定-n(%)",
         indent = "\li420 ");

上述例子中,使用参数 INDENT 指定了 RTF 控制符 \li420 作为缩进字符串。如需使 RTF 控制符生效,需要在传送至 ODS 的同时,指定相关元素的 PROTECTSPECIALCHAR 属性值为 OFF

指定分类名称后缀

%qualify(indata = adam.adsl(where = (FASFL = "Y")),
         var = ecgcsig,
         by = clsig.,
         missing = true,
         label = "ECG 临床意义判定",
         indent = "\li420 ",
         suffix = ",n(%)");

指定是否输出各分类合计的统计结果

%qualify(indata = adam.adsl(where = (FASFL = "Y")),
         var = ecgcsig,
         by = clsig.,
         missing = true,
         label = "ECG 临床意义判定",
         indent = "\li420 ",
         suffix = ",n(%)",
         total = true);