直接来看一个项目中的Spec中的visit的编程的逻辑:
Set to VISIT. For VISIT contains 'Unscheduled', set to SV.VISIT based on EGDTC.
对于Scheduled 的visit,不进行任何操作;对于Unscheduled的visit,需要使用Domain SV中的visit的值。如何进行匹配呢?基于EGDTC,取EGDTC=SVSTDTC,当然前提是观测的USUBJID值是相同的。整个编程逻辑很清晰,原domain数据集与SV,按变量USUBJID、EGDTC进行拼接,再对VISIT进行赋值。
这里有几点需要注意,首先,先对SV数据集进行筛选,只保留Unscheduled的visit的值。第二,如果EGDTC值缺失如何处理?这种情况需要进行一个判断,这项检测是否进行了,如果检测没有进行,时间缺失是合理的,不需要拼接SV中的Unscheduled visit;如果检测进行了,时间缺失就是一个data issue,这时候是需要对其进行填补的。如何判断检测是否进行了呢?只要XXORRES这个变量非空,就表明这项检测已经进行。在检测进行的情况下,EGDTC的填补,取visit中“Unscheduled XX/XX/XXXX”的时间进行填补。为了方便起见,我们可以新建一个变量UNDTC,对于需要拼接SV.visit的观测,UNDTC的值为EGDTC或填补的时间;对于不需要的拼接的观测,变量值设为空。
整个过程中,比较容易出现错误的地方是,对于EGDTC缺失、XXORRES为空的观测进行了拼接。出现这个问题,可能因为拼接的逻辑没有理解,或者是理解了但是代码表述出现的问题。我自己出现的错误,用的赋值条件是index(visit, 'Unscheduled')>0 and not missing(XXORRES) and not missing(EGDTC) , 这样的问题在于,有一些观测XXORRES虽然缺失,但是有EGDTC有值,也要进行拼接;还有一部分XORRES不缺失,但是EGDTC缺失,这一情况需要进行填补,我的条件排除了这样的情况了。这里不得不提,新建UNDTC这个变量的好处了。对于需要拼接的观测,UNDTC赋值好时间;对于不需要拼接的观测,UNDTC赋空。这样就可以以UNDTC是否为空,进行判断是否要对visit进行赋值了。