SAS编程

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

2022-05-16  本文已影响0人  SASPRO的打工人生活

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,真是无语,已经因为这个括号出现好几次错了。

上一篇下一篇

猜你喜欢

热点阅读