Похоже, что ваша настоящая ошибка заключалась в том, что вы передали строковое значение в удаленную базу данных без кавычек.Вы можете решить это, передав кавычки в вызове макроса.
%macro Correlation(dsn,db,prevdb,prodcode,sqltable,var,brick);
proc sql;
connect to ODBC (required="DSN=&dsn;" );
create table comp_correlation as select * from connection to ODBC
(select a.Table_Name,
a.Variable,
a.Correlation as Current_Corr
from DBTest.dbo.MetaData as a
where Product_Code=&prodcode. and Table_Name=&sqltable. and
variable=&var.);
disconnect from ODBC;
quit;
%mend;
%Correlation(dsn=********,db=A2019,prevdb=A2018
,prodcode='HouseValues', sqltable='Houses', var='Value');
Обратите внимание, что вы можете использовать имена параметров в вызове макроса, даже для параметров, которые определены так, чтобы они также могли вызываться по позиции.
Вы также можете сделать свой макрос немного умнее и добавить кавычки.Вы могли бы даже сделать его достаточно умным, чтобы удалить любые необязательные существующие двойные кавычки вокруг значения и заменить их одинарными кавычками.
%let prodcode=%sysfunc(quote(%qsysfunc(dequote(%superq(prodcode)))),%str(%'));
Тогда вы можете вызывать его как угодно.
prodcode=HouseValues
prodcode="HouseValues"
prodcode='HouseValues'