Git Product home page Git Product logo

descriptive-statistics-macro's Introduction

descriptive-statistics-macro's People

Contributors

snoopy1866 avatar

Watchers

 avatar  avatar

descriptive-statistics-macro's Issues

[bug] %qualify_multi 中间数据集 `temp_res_group_level_&i` 变量 `item` 长度不一致可能导致在 merge 操作时被截断

MLOGIC(QUALIFY): 准备结束执行。
MPRINT(QUALIFY_MULTI):  ;
SYMBOLGEN:  宏变量 QUALIFY_EXIT_WITH_ERROR 解析为 FALSE
MLOGIC(QUALIFY_MULTI):  %IF 条件 %bquote(&qualify_exit_with_error) = TRUE 为 FALSE
MLOGIC(QUALIFY_MULTI):  %DO 循环的索引变量 I 当前为 3;循环将不再迭代。
MPRINT(QUALIFY_MULTI):   data tmp_qualify_m_outdata;
SYMBOLGEN:  宏变量 GROUP_LEVEL_N 解析为        2
MLOGIC(QUALIFY_MULTI): %DO 循环正准备开始;索引变量为 I;起始值为 1;截止值为 2;增量值为 1。
SYMBOLGEN:  宏变量 I 解析为 1
MLOGIC(QUALIFY_MULTI): %DO 循环的索引变量 I 当前为 2;循环将再次迭代。
SYMBOLGEN:  宏变量 I 解析为 2
MLOGIC(QUALIFY_MULTI):  %DO 循环的索引变量 I 当前为 3;循环将不再迭代。
MPRINT(QUALIFY_MULTI):   merge temp_res_group_level_1 temp_res_group_level_2
tmp_qualify_m_res_sum ;
SYMBOLGEN:  宏变量 GROUP_LEVEL_N 解析为        2
MLOGIC(QUALIFY_MULTI): %DO 循环正准备开始;索引变量为 I;起始值为 1;截止值为 2;增量值为 1。
SYMBOLGEN:  宏变量 I 解析为 1
SYMBOLGEN: && 解析为 &。
SYMBOLGEN:  宏变量 I 解析为 1
SYMBOLGEN:  宏变量 I 解析为 1
SYMBOLGEN:  宏变量 GROUP_LEVEL_1 解析为 "试验组"
SYMBOLGEN:  宏变量 I 解析为 1
SYMBOLGEN: && 解析为 &。
SYMBOLGEN:  宏变量 I 解析为 1
SYMBOLGEN:  宏变量 GROUP_LEVEL_1 解析为 "试验组"
SYMBOLGEN:  宏变量 I 解析为 1
SYMBOLGEN: && 解析为 &。
SYMBOLGEN:  宏变量 I 解析为 1
SYMBOLGEN:  宏变量 GROUP_LEVEL_1 解析为 "试验组"
SYMBOLGEN:  宏变量 I 解析为 1
SYMBOLGEN: && 解析为 &。
SYMBOLGEN:  宏变量 I 解析为 1
SYMBOLGEN:  宏变量 GROUP_LEVEL_1 解析为 "试验组"
SYMBOLGEN:  宏变量 I 解析为 1
SYMBOLGEN: && 解析为 &。
SYMBOLGEN:  宏变量 I 解析为 1
SYMBOLGEN:  宏变量 GROUP_LEVEL_1 解析为 "试验组"
MLOGIC(QUALIFY_MULTI): %DO 循环的索引变量 I 当前为 2;循环将再次迭代。
SYMBOLGEN:  宏变量 I 解析为 2
SYMBOLGEN: && 解析为 &。
SYMBOLGEN:  宏变量 I 解析为 2
SYMBOLGEN:  宏变量 I 解析为 2
SYMBOLGEN:  宏变量 GROUP_LEVEL_2 解析为 "对照组"
SYMBOLGEN:  宏变量 I 解析为 2
SYMBOLGEN: && 解析为 &。
SYMBOLGEN:  宏变量 I 解析为 2
SYMBOLGEN:  宏变量 GROUP_LEVEL_2 解析为 "对照组"
SYMBOLGEN:  宏变量 I 解析为 2
SYMBOLGEN: && 解析为 &。
SYMBOLGEN:  宏变量 I 解析为 2
SYMBOLGEN:  宏变量 GROUP_LEVEL_2 解析为 "对照组"
SYMBOLGEN:  宏变量 I 解析为 2
SYMBOLGEN: && 解析为 &。
SYMBOLGEN:  宏变量 I 解析为 2
SYMBOLGEN:  宏变量 GROUP_LEVEL_2 解析为 "对照组"
SYMBOLGEN:  宏变量 I 解析为 2
SYMBOLGEN: && 解析为 &。
SYMBOLGEN:  宏变量 I 解析为 2
SYMBOLGEN:  宏变量 GROUP_LEVEL_2 解析为 "对照组"
MLOGIC(QUALIFY_MULTI):  %DO 循环的索引变量 I 当前为 3;循环将不再迭代。
MPRINT(QUALIFY_MULTI):   label value_1 = "试验组" n_1 = "试验组"(频数) n_1_fmt =
"试验组"(频数格式化) rate_1 = "试验组"(频率) rate_1_fmt = "试验组"(频率格式化) value_2 =
"对照组" n_2 = "对照组"(频数) n_2_fmt = "对照组"(频数格式化) rate_2 = "对照组"(频率)
rate_2_fmt = "对照组"(频率格式化) value_sum = "合计" n_sum = "合计(频数)" n_sum_fmt =
"合计(频数格式化)" rate_sum = "合计(频率)" rate_sum_fmt = "合计(频率格式化)" item = "分类";
MPRINT(QUALIFY_MULTI):   run;

WARNING: 输入数据集为变量“ITEM”指定了多个长度。 这会造成数据截断。
NOTE: 从数据集 WORK.TEMP_RES_GROUP_LEVEL_1. 读取了 2 个观测
NOTE: 从数据集 WORK.TEMP_RES_GROUP_LEVEL_2. 读取了 4 个观测
NOTE: 从数据集 WORK.TMP_QUALIFY_M_RES_SUM. 读取了 5 个观测
NOTE: 数据集 WORK.TMP_QUALIFY_M_OUTDATA 有 5 个观测和 17 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间          0.02 秒
      CPU 时间          0.01 秒

[bug] %qualify 参数 `by` 指定的 format 含有数据集中未出现的值时,在参数 `var` 中对该分类的重命名不起作用。

当指定参数 by 为一个 format,且在参数 var 上对分类进行重命名,如果数据集中缺少被重命名的分类,则该分类在输出数据集中将保持 format 中的值,而不是预期中重命名之后的值。

例如:

proc format;
    value yn
        1 = "Y"
        2 = "N";
run;

%qualify_multi_test(indata      = adsl,
                    var         = wdfl("Y" = "是", "N" = "否"),
                    group       = arm,
                    groupby     = armn,
                    by          = yn.,
                    outdata     = out,
                    stat_format = (#rate = srate.),
                    label       = '是否剔除, n(%)');

若数据集 adsl 中变量 wdfl 的值均为 N,则输出结果中,本应经过重命名后显示为 “是” 的分类仍然显示为原始值 Y

image

[bug] %desc_coun 分类名称长度超出 200 时结果被截断

原因:程序内部使用 PROC SQL 生成数据集,在 PROC SQL 中,使用了 CAT 函数家族进行字符串的连接。在 PROC SQL 中,CAT 函数返回值始终为 200(即便事先指定了变量的 length = 32767),导致 sql 表达式的结果被截断。

image

解决办法:改用字符串连接符 ||,并配合 left, trim, strip 去除前后空格。

[feat] %qualify 支持在 OCCDS 数据集上分别统计例数和例次

新增参数 UID,指定观测的唯一标识符变量。

  • 若指定 UID = USUBJID,将根据变量 USUBJID 对数据集进行去重,去重前统计结果为例次,去重后统计结果为例数
  • 若指定 UID = #NULL,将不会对数据集进行去重,统计结果为例数,这是 默认行为

%qualify_multi_test 的行为将基于例数进行。

[perf] %quantify 对参数 `PATTERN` 指定的统计量去重

指定 var = age, pattern = %nrstr(#std|#stddev) 时,日志显示如下:

NOTE: 变量 AGE_StdDev 在文件“WORK.TMP_QUANTIFY_STAT”中已存在,改用 AGE_StdDev2。

原因:解析后的统计量传入 PROC MEANS 语句前没有进行去重。

proc means data = &indata %do i = 1 %to &part_n;
%do j = 1 %to &&stat_&i;
%bquote( )%bquote(&&stat_&i._&j)
%end;
%end;
noprint
;

[bug] %qualify_multi 未指定参数 `GROUPBY` 时,未创建宏变量 `group_level_freq_1`

以下代码段没有创建宏变量 group_level_freq_1

%else %if %superq(groupby) = #AUTO %then %do;
proc sql noprint;
select distinct quote(strip(&group_var)) into : group_level_1- from %superq(indata) where not missing(&group_var);
select count(distinct &group_var) into : group_level_n from %superq(indata);
quit;
%end;

建议参考以下代码段:

proc sql noprint;
create table tmp_qualify_m_groupby_sorted as
select
distinct
&group_var,
&groupby_var
from %superq(indata) where not missing(&group_var) order by &groupby_var &groupby_direction, &group_var;
select quote(strip(&group_var)) into : group_level_1- from tmp_qualify_m_groupby_sorted;
select quote(strip(&group_var) || '(频数)') into : group_level_freq_1- from tmp_qualify_m_groupby_sorted;
select quote(strip(&group_var) || '(频数格式化)') into : group_level_freq_fmt_1- from tmp_qualify_m_groupby_sorted;
select quote(strip(&group_var) || '(频数)(兼容)') into : group_level_n_1- from tmp_qualify_m_groupby_sorted;
select quote(strip(&group_var) || '(频数格式化)(兼容)') into : group_level_n_fmt_1- from tmp_qualify_m_groupby_sorted;
select quote(strip(&group_var) || '(频次)') into : group_level_times_1- from tmp_qualify_m_groupby_sorted;
select quote(strip(&group_var) || '(频次格式化)') into : group_level_times_fmt_1- from tmp_qualify_m_groupby_sorted;
select quote(strip(&group_var) || '(频率)') into : group_level_rate_1- from tmp_qualify_m_groupby_sorted;
select quote(strip(&group_var) || '(频率格式化)') into : group_level_rate_fmt_1- from tmp_qualify_m_groupby_sorted;
select count(distinct &group_var) into : group_level_n from tmp_qualify_m_groupby_sorted;
quit;

[bug] %qualify 指定 `BY` 排序格式包含的分类多于数据集中的分类时,未输出全部分类的统计结果

满足以下条件,程序输出结果不完整:

  • 参数 INDATA 指定的数据集中分析变量 VAR 未覆盖所有需要分析的分类;
  • 参数 BY 指定了一个输出格式 format 作为排序的依据;
  • format 包含 INDATA 数据集中分析变量 VAR 没有出现的分类。

例如:房颤现病史表格中,变量 NHYW 的值均为 ,但统计时要求输出 两种情况的比例,此时输出数据集中仅包含 情况的结果。

image

[feat] %qualify 参数 `SUFFIX` 支持指定变量的值

例如:
image

%qualify(..., VAR = AVALD, SUFFIX = $"({AVALC})")

预期输出数据集中,各分类显示的值分别为:

  • 非常容易(5分)
  • 非常锁定牢固(5分)
  • 较为便捷(4分)
  • 非常顺畅(5分)
  • 非常减轻疲劳(5分)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.