A case
выражение может использоваться в качестве критерия соединения.
Не использовать макрос.Вы используете %sysfunc(exist
просто неправильно, функция exist
проверяет наличие набора данных, а %sysfunc
выполняется до времени компиляции исходного кода, а не во время выполнения SQL.
Использованиевыражение case для оценки предварительных условий проверки на равенство.
Пример:
data weight1;
input ID1 $ Week1 DOB1;
datalines;
1111 195 101
2222 220 102
3333 173 103
4444 135 104
;
data weight2;
infile datalines missover;
input ID2 $ Week2 DOB2;
datalines;
. 195 101
2222 220 102
3333 173 103
4444 135 104
;
proc sql;
create table want as
select a.ID1, a.DOB1, b.ID2,b.DOB2
from weight1 a
join weight2 b
on case
when (a.id1 is not missing and b.id2 is not missing) then a.id1=b.id2
when (a.dob1 is not missing and b.dob2 is not missing) then a.dob1=b.dob2
else 0
end
;
ПРИМЕЧАНИЕ. Случай реальных данных, когда в каждой таблице более одной строки с отсутствующим идентификатороми та же самая дата рождения вызовет мультипликативный эффект числа строк в таблице результатов.Например, этот пример данных:
1111 195 101
2222 220 102
3333 173 103
4444 135 104
. 145 105 ***
. 175 105 ***
и
. 195 101
2222 220 102
3333 173 103
4444 135 104
. 155 105 ***
. 166 105 ***
4 = 2 x 2 строки результатов из помеченных данных.