【发布时间】:2017-08-17 19:28:31
【问题描述】:
我有两种方法可以做同样的事情,但没有得到相同的结果。这是什么原因?
第一种方式:
Proc sql;
Create table abc.immu as
select ID, DATE, CODE
from xyz.imm
where DATE between to_date('2008-01-01','YYYY-MM-DD') and to_date('2016-01-31','YYYY-MM-DD')
Order by CODE);
Quit;
Proc sql ;
Create table abc.testb as
select CODE, description from xyz.REF_code where lower(description)like '%hep b%';
Quit;
proc sort data=abc.testb;
by code;
run;
data abc.testb1;
merge abc.immu(in=a) abc.testb (in=b);
by code;
if a=1 and b=1;
run;
第二种方式
Create table abc.testb1 as
Select ID, DATE,CODE
From xyz.imm
where CODE in (select CODE from xyz.REF_code where lower(description)like '%hep b%')
AND DATE between to_date('2008-01-01','YYYY-MM-DD') and to_date('2016-01-31','YYYY-MM-DD')
Order by ID, DATE;
Quit;
proc sort data=abc.testb1 nodupkey;
by ID DATE;
run;
为什么没有得到相同的结果?这不是两种不同的方式来实现同一件事吗?
【问题讨论】:
-
我的意思是观察结果相同
-
to_date() 在 SAS 中为您工作?这不是 SAS 代码 afaik,除非您使用直通,根据您发布的内容,这似乎没有发生。我认为如果您在任一表中有重复项,结果可能会有所不同。运行 PROC COMPARE 以查看结果的不同之处,这将帮助您隔离问题。
-
是的,使用 pass through,即使没有运行 dup 键,观察结果也不相同
-
第一种方法中没有
NODUPKEY的等价物。