Я пишу макрос sas, где я пытаюсь присоединиться к одному из двух столбцов в зависимости от того, что существует. Но когда я даю что-то вроде этого ошибки вне, так как он хочет, чтобы обе колонки существовать:Нужно условно присоединяться к одному из двух столбцов (в зависимости от того, что существует)
%Macro Base_pop(ssc,input_table,POPN_TBL);
PROC SQL;
CREATE TABLE test_&ssc. AS
SELECT B.ACCOUNT_ID
FROM ADL_EXT.&input_table.TB INNER JOIN
ADL_BSE.BRDM_POP_FLG_&POPN_TBL.B
ON B.ACCOUNT_ID = (CASE WHEN %sysfunc(exist(TB.ACCOUNT_ID)) then TB.ACCOUNT_ID
ELSE TB.FAC_ID
END)
WHERE B.FLG = 'Y'
ORDER BY B.ACCOUNT_ID ;
QUIT;
%MEND;
Ошибки кода, говоря TB.Account_id не существует. Я тоже попытался объединиться, это тоже не сработало.
Только один из двух столбцов будет существовать на таблицах, переданных макросу. Итак, мне нужно динамически присоединяться к столбцу, который существует в моей текущей таблице.
Предложения пожалуйста!
1) Функция EXIST() проверяет наличие набора данных, а не переменной. (2) Поскольку вы сделали макрос, вы можете использовать логику% IF для условного генерирования кода SAS, который вы хотите запустить. Таким образом, вы НЕ можете генерировать ссылки на переменные, которые не существуют. В вашем примере нет условно сгенерированного кода. Я подозреваю, что вы хотите заменить оператор CASE на команду% IF ..% THEN% ELSE. – Tom
Не можете ли вы попросить программиста, который вызывает макрос, сказать макросу, какое имя переменной использовать? – Tom
Спасибо за ваш ответ Том! Макрос большой и использует различные столбцы, которые могут существовать для нескольких таблиц, а не для других. Даже после условного%, если логика ложна, почему компилятор ищет имена переменных, которые следуют ложному условию. Это не только один столбец, у меня есть несколько таких столбцов, вы не хотите добавлять параметры, разве у нас нет работы. – Rhea