美文网首页SAS编程
111:为什么--SEQ顺序不对?编程中可能出现的问题

111:为什么--SEQ顺序不对?编程中可能出现的问题

作者: SASPRO的打工人生活 | 来源:发表于2022-05-16 23:12 被阅读0次

    1:为什么merge的时候,明明一个数据集是每人一条,然后另一个数据集是一人多条的时候,通过usubjid连接的时候,还是只有一个人只有一条记录。

    也就是说我现在要将RFPENDTC merge 到其他数据集的时候,即使这个数据集是一人一条,但是最终输出的也只是一个人只有一个RFPENDTC的记录,而不是这个人的每条观测都有RFPENDTC.

    就比如说

    data dm;

    set sdtm.dm;

    RFXSTDTC=substr(RFXSTDTC, 1, 10);

    keep USUBJID RFICDTC RFXSTDTC RFPENDTC ARMCD DTHDTC;

    proc sort;by USUBJID;

    run;

    data temp1;

    setdm;

    SESTDTC=strip(RFICDTC);

    if SESTDTC ne '';

    ETCD='SCR';

    proc sort;by usubjid;

    run;

    data temp2;

    setdm;

        proc sort;by usubjid;

    run;

    data svall;

    merge svall1temp1;

    by usubjid;

    .........

    run;

    此时svall这个数据集里面已经有USUBJID RFICDTC RFXSTDTC RFPENDTC ARMCD DTHDTC这几个变量了;

    data cmall;

      mergesvalldm(keep=USUBJID RFPENDTC);

    by usubjid;

    run;

    问题就出现在这里了,svall这个数据集里面已经有USUBJIDRFPENDTC,然后你DM数据集也有RFPENDTC,merge的时候就会出现上面讲到的问题,而不是这个人所有的观测都有RFPENDTC的值,为什么我也不知道。

    所以我们可以通过下面这种方式解决这个问题,先删除主数据集的目标变量

    data cmall;

      merge svall(drop=RFPENDTC) dm(keep=USUBJID RFPENDTC);

    by usubjid;

    run;

    2:--SEQ顺序为什么跟其他人的不一样,比如说筛选期是1,治疗期1是2,治疗期2是3,治疗期3是4,但是我求出来的SEQ却是筛选期是1,治疗期1也是从1开始。

    我看排序变量都一样啊,比如说都是STUDYID USUBJID SESTDTC TAETORD啊,为什么出来的SESEQ不一样呢?

    3:NOTE: NOSPOOL is on. Rerunning with OPTION SPOOL might allow recovery of the LINE and COLUMN where the error has occurred.

    我在SAS Community搜索这个问题,有一个人回答“I guess the problem lies in the macro variable &scen”,于是我回头看我的宏变量,发现没有写错啊,但是却发现了造成这个问题的原因。又是因为粗心导致多写了一个括号导致报这个log,真是无语,已经因为这个括号出现好几次错了。

    相关文章

      网友评论

        本文标题:111:为什么--SEQ顺序不对?编程中可能出现的问题

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