愚庸 发表于 2016-8-2 14:54 
where关键词后有三个条件,而这三个条件没有用连接词关联。
是这样的,据说sql的内连接可以等同于merge,而且不需要排序,
数据集1
SOC_TXT PT_TXT AEVGRD1C Ni Im
BLOOD ANAEMIA 1 4 1
BLOOD ANAEMIA 2 2
BLOOD LEUKOCYTOSIS 1 1
CARDIAC ACUTE 3 1
CARDIAC MYOCARDIAL 4 1
CARDIAC PECTORIS 2 0
CARDIAC PECTORIS 3 1
CARDIAC FIBRILLATION 2 1
数据集2
SOC_TXT PT_TXT AEVGRD1C
BLOOD ANAEMIA 1
BLOOD ANAEMIA 2
BLOOD ANAEMIA 3
BLOOD ANAEMIA 4
BLOOD LEUKOCYTOSIS 1
BLOOD LEUKOCYTOSIS 2
BLOOD LEUKOCYTOSIS 3
BLOOD LEUKOCYTOSIS 4
CARDIAC ACUTE 1
CARDIAC ACUTE 2
CARDIAC ACUTE 3
CARDIAC ACUTE 4
CARDIAC MYOCARDIAL 1
CARDIAC MYOCARDIAL 2
CARDIAC MYOCARDIAL 3
CARDIAC MYOCARDIAL 4
CARDIAC PECTORIS 1
CARDIAC PECTORIS 2
CARDIAC PECTORIS 3
CARDIAC PECTORIS 4
CARDIAC FIBRILLATION 1
CARDIAC FIBRILLATION 2
CARDIAC FIBRILLATION 3
CARDIAC FIBRILLATION 4
然后用
proc sort data=test1;by SOC_TXT PT_TXT AEVGRD1C;run;
proc sort data=test2;by SOC_TXT PT_TXT AEVGRD1C;run;
data test3;
merge test1 test2;
by SOC_TXT PT_TXT AEVGRD1C;
run;
结果是
SOC_TXT PT_TXT AEVGRD1C Ni Im
BLOOD ANAEMIA 1 4 1
BLOOD ANAEMIA 2 2
BLOOD ANAEMIA 3
BLOOD ANAEMIA 4
BLOOD LEUKOCYTOSIS 1 1
BLOOD LEUKOCYTOSIS 2
BLOOD LEUKOCYTOSIS 3
BLOOD LEUKOCYTOSIS 4
CARDIAC ACUTE 1
CARDIAC ACUTE 2
CARDIAC ACUTE 3 1
CARDIAC ACUTE 4
CARDIAC FIBRILLATION 1
CARDIAC FIBRILLATION 2 1
CARDIAC FIBRILLATION 3
CARDIAC FIBRILLATION 4
CARDIAC MYOCARDIAL 1
CARDIAC MYOCARDIAL 2
CARDIAC MYOCARDIAL 3
CARDIAC MYOCARDIAL 4 1
CARDIAC PECTORIS 1
CARDIAC PECTORIS 2 0
CARDIAC PECTORIS 3 1
CARDIAC PECTORIS 4
用内连接
proc sql;
create table test4 as select test1.*,test2.AEVGRD1C from test1 as a,test2 as b
where a.SOC_TXT=b.SOC_TXT & a.PT_TXT=b.PT_TXT & a.AEVGRD1C=b.AEVGRD1C;
quit;
结果是
SOC_TXT PT_TXT AEVGRD1C Ni Im
BLOOD ANAEMIA 1 4 1
BLOOD ANAEMIA 2 2
BLOOD LEUKOCYTOSIS 1 1
CARDIAC ACUTE 3 1
CARDIAC FIBRILLATION 2 1
CARDIAC MYOCARDIAL 4 1
CARDIAC PECTORIS 2 0
CARDIAC PECTORIS 3 1
我知道为什么会这个样子,就是想知道能不能用内连接的方式作出merge的效果?
报错的话也不算是错误,但是希望还是可以通过什么方式来回避:
WARNING: Variable AEVGRD1C already exists on file WORK.TEST4.