Pinnacle 21-Issue:FASEQ重复值的处理 - 千百度社区-数据库论坛-技术交流-千百度社区

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

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

在使用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茶谈!
若有疑问,欢迎评论交流!
欢迎点赞、转发!

最后编辑于 : 2023.02.14 07:20:49 © 著作权归作者所有,转载或内容合作请联系作者

请登录后发表评论

    没有回复内容