x***I 发帖数: 91 | 1 最近在看sas programing in pharmaceutical industry.
看到作者用proc sql合并datasets,可是不知道为什么,最后一个记录出不全。
自己运行一下他的程序也是一样的,我用的是SAS9.2.
这个有什么办法解决么。
Program 4.8 Performing a Many-to-Many Join with PROC SQL
**** ADVERSE EVENTS;
data aes;
informat ae_start date9. ae_stop date9.;
input @1 subject_id $3.
@5 ae_start date9.
@15 ae_stop date9.
@25 adverse_event $15.;
datalines;
101 01JAN2004 02JAN2004 Headache
101 15JAN2004 03FEB2004 Back Pain
102 03NOV2003 10DEC2003 Rash
102 03JAN2004 10JAN2004 Abdominal Pain
102 04APR2004 04APR2004 Constipation
;
run;
**** CONCOMITANT MEDICATIONS;
data conmeds;
informat cm_start date9. cm_stop date9.;
input @1 subject_id $3.
@5 cm_start date9.
@15 cm_stop date9.
@25 conmed $20.;
datalines;
101 01JAN2004 01JAN2004 Acetaminophen
101 20DEC2003 20MAR2004 Tylenol w/ Codeine
101 12DEC2003 12DEC2003 Sudafed
102 07DEC2003 18DEC2003 Hydrocortizone Cream
102 06JAN2004 08JAN2004 Simethicone
102 09JAN2004 10MAR2004 Esomeprazole
;
run;
**** MERGE MEDICATIONS WITH ADVERSE EVENTS;
proc sql;
create table ae_meds as
select a.subject_id, a.ae_start, a.ae_stop, a.adverse_event,
c.cm_start, c.cm_stop, c.conmed from
aes as a left join conmeds as c
on (a.subject_id = c.subject_id) and
( (a.ae_start <= c.cm_start <= a.ae_stop) or
(a.ae_start <= c.cm_stop <= a.ae_stop) or
((c.cm_start < a.ae_start) and (a.ae_stop < c.cm_stop)) );
quit; |
r**********d 发帖数: 510 | 2 04APR2004 04APR2004 doesnt meet the dates check condition left join. |
m*********n 发帖数: 413 | |
s******r 发帖数: 1524 | 4 what do you mean "不全". I run it and no problem.
【在 x***I 的大作中提到】 : 最近在看sas programing in pharmaceutical industry. : 看到作者用proc sql合并datasets,可是不知道为什么,最后一个记录出不全。 : 自己运行一下他的程序也是一样的,我用的是SAS9.2. : 这个有什么办法解决么。 : Program 4.8 Performing a Many-to-Many Join with PROC SQL : **** ADVERSE EVENTS; : data aes; : informat ae_start date9. ae_stop date9.; : input @1 subject_id $3. : @5 ae_start date9.
|
r********n 发帖数: 7441 | 5 对这个不熟,一般其他语言类似情况可以考虑是否buffer全部写入硬盘了没有 |
x***I 发帖数: 91 | 6 SQL输出如下。 我的问题是Constipation没有missing value,如果用data step做合并
,就不会出这样的问题。
subject_
Obs id ae_start ae_stop adverse_event cm_start cm_stop
conmed
1 101 16071 16072 Headache 16071 16071
Acetaminophen
2 101 16071 16072 Headache 16059 16150
Tylenol w/ Codeine
3 101 16085 16104 Back Pain 16059 16150
Tylenol w/ Codeine
4 102 16073 16080 Abdominal Pain 16079 16140
Esomeprazole
5 102 16073 16080 Abdominal Pain 16076 16078
Simethicone
6 102 16012 16049 Rash 16046 16057
Hydrocortizone Cream
7 102 16165 16165 Constipation . . |
a****t 发帖数: 1007 | 7 我来尝试答一下,看是否回答了你的问题。
程序中你用了 left join,如果你改成join或者后面改成where statement,就不会有
missing value了。
data step 其实也是可能会发生这种问题的,如果你只用merge就不会,其他的
combination还是会发生的。
如果回答了你的问题,baozi please...
【在 x***I 的大作中提到】 : SQL输出如下。 我的问题是Constipation没有missing value,如果用data step做合并 : ,就不会出这样的问题。 : subject_ : Obs id ae_start ae_stop adverse_event cm_start cm_stop : conmed : 1 101 16071 16072 Headache 16071 16071 : Acetaminophen : 2 101 16071 16072 Headache 16059 16150 : Tylenol w/ Codeine : 3 101 16085 16104 Back Pain 16059 16150
|