SUPP数据集是对变量的补充说明,我们先直接来看一下一个项目中 ADCM 中变量 ATC1 的生成。Spec中的逻辑是:
SUPPCM.QVAL where QNAM= ARATC1T for the given USUBJID and CMSEQ if CMCAT = "ART MEDICATIONS";
SUPPCM.QVAL where QNAM= CMATC1T for the given USUBJID and CMSEQ if CMCAT = "PRIOR AND CONCOMITANT MEDICATIONS";
这个变量的有两个来源,我们拿一个来举例。ATC1 的值为 SUPPCM 数据集中的 QVAL,QVAL有那么多条记录,有什么条件呢?
我看到这些条件第一个想法是,CM 与 SUPPCM 按照USUBJID、CMSEQ拼接就好,然后根据另外两个条件进行赋值就好了。可当我看到SUPPCM数据集的结构时,突然有种无从下手的感觉。
- SUPPCM.QNAM= ARATC1T
- USUBJID 相同
- CMSEQ 相同
- CM.CMCAT = "ART MEDICATIONS"
on a.usubjid =b.usubjid and a.cmseq = b.idvarval_n
同时,在Where语句中进行条件设置,不需要多余的处理。生成的数据集如下:回过头来看之前的代码,可以进行一些小修改。在SQL拼接中,目前的思路是需要哪些变量,就生成新的数据集,数据集里包含ID类的变量,用于后来的拼接,思路很流畅;当然,也可以一步到位,直接将新变量拼接到CM数据集中,新建一个拼接一个,不需要最后的汇总拼接。
在DATA步拼接中,可以不进行观测数筛选,保留其他不符合条件的观测,因为在拼接过程中这些观测不影响拼接结果,如下图:这样的修改因为保留了很多观测,拼接的效率会降低,但是整个思路会更容易理解。