美文网首页js css html
Pinnacle 21-Issue:FASEQ重复值的处理

Pinnacle 21-Issue:FASEQ重复值的处理

作者: 野藤_ | 来源:发表于2023-02-12 23:04 被阅读0次

    在使用P21E进行SDTM数据Validation时,FA数据集可能会出现这样的issue:

    SD0005: Duplicate value for FASEQ variable.

    在SDTM数据集中,对受试者的每一条记录来讲,--SEQ变量应该是独特的、唯一的。关于这一点,不管是手动编程,还是各家公司的宏程序,应该都会处理好。

    这里出现这个Issue的原因是,P21E在Validate SDTM数据集时,会将所有FA数据集综合在一起进行检查,这就导致一个受试者的一个FASEQ值出现多次

    这个问题的处理方法不复杂,FA数据集按照一定顺序依次生成,后一个数据集中受试者的FASEQ取值,从前一个数据集中该受试者最大FASEQ值+1起计数。这样就能保证,进行Validation时,对某个受试者来讲,FASEQ的值是不会重复的。(当然,+任意正整数都可以避免这个Issue)

    基于以上方法,提供一个SAS编程实现思路:

    1. 两个FA数据集,按常规思路从数值1开始生成FASEQ变量;
    2. 获取前一个数据集中的每一个受试者的FASEQ最大值;
    3. 后一个数据集以USUBJID为关键变量,左拼接获取最大值;
    4. 后一个数据集中FASEQ加上拼接获取的最大值。

    建立2个模拟数据集,都包含从数值1开始的FASEQ变量:

    data class1;
      set sashelp.class;
      if _n_ <=2 then do;
        do FASEQ_ = 1 to 2;
          output;
        end;
      end;
    run;
    
    data class2;
      set sashelp.class;
      if _n_ <=4 then do;
        do FASEQ_ = 1 to 3;
          output;
        end;
      end;
    run;
    

    这两个数据集的内容如下:

    SAS程序实现的效果是,在Class2中,Alfrd与Alice这两位受试者的FASEQ变量都会加上Class1数据集中的最大值2。

    演示程序如下:

    proc sql norpint;
       create table class2_final as
        select a.*, b.max, sum(faseq_, b.max) as FASEQ
       from class2 as a
        left join
        (select name, max(faseq_) as max 
          from class1 
          group by name
        ) as b
        on a.name = b.name
        order by name, faseq
      ;
    run;
    

    程序中解释一点,后一个数据集FASEQ变量与最大值求和时,使用sum函数是为了规避与空值相加还是空值的情况。如果不使用sum函数的话,还需要用条件语句进行判断max是否为空。

    这样处理就可以规避Issue SD0005,各家公司也可以考虑将这个功能添加到SEQ宏程序中。

    感谢阅读, 欢迎关注:SAS茶谈!
    若有疑问,欢迎评论交流!
    欢迎点赞、转发!

    相关文章

      网友评论

        本文标题:Pinnacle 21-Issue:FASEQ重复值的处理

        本文链接:https://www.haomeiwen.com/subject/zpgdkdtx.html