ОШИБКА: Следующие столбцы не были найдены в участвующих таблицах - PullRequest
0 голосов
/ 09 сентября 2018

Это сам код - до того, как встроить внутренний материал в макрос, все работало:

%macro test(product, dedi, pfi,md,sd,cIi,cIIi,cIIIi,cIo,cIIo,cIIIo,bm);
%let product = ∏
<more let statements here for all variables>

<data pull happens here>

PROC SQL;
CREATE TABLE WORK.ProdFilter AS 
SELECT t1.*
  FROM WORK.PRODCLAIMS2 t1
  WHERE t1.Product_Type = &Product
;QUIT;

<more code here> 
%mend

%test(&product, &dedi, &pfi,&Ded, &Sd,&CIib, &CIIib,&CIIIib, &CIob, &CIIob,&CIIIob,&bm);

Он успешно может выполнить извлечение данных, а затем ломается, когда я впервые пытаюсь использовать переменную. Это пользовательские переменные, использующие приглашения, которые, кажется, также работают нормально, но затем я получаю ошибку:

"ОШИБКА: в участвующих таблицах не найдено следующих столбцов: DenP"

DenP - это пользовательский ввод, и я знаю, что это продукт. Это не столбец - столбец t1.Product_Type, и я пытаюсь отфильтровать только те строки с «DenP» в этом столбце. Этот шаг отлично работает, когда не в макросе.

Я почти уверен, что это связано либо с тем, как я написал и назвал сам макрос, либо с тем, что он злится от того, как я назвал подсказки? Я включил первый оператор% let в качестве примера - возможно, если я назову подсказки по-другому, это будет иметь значение?

Мы никогда не доберемся до тех пор, пока это не прекратится с этой первой ошибкой. Любое руководство о том, где возникла проблема, было бы полезно - я думал, что должен был перечислить переменные в макросе (), но, возможно, я должен был перечислить что-то еще?

1 Ответ

0 голосов
/ 09 сентября 2018

Вам нужно заключить в кавычки значение, чтобы SAS знал, что вы сравниваете строку, а не другой столбец.

PROC SQL;
CREATE TABLE WORK.ProdFilter AS 
SELECT t1.*
  FROM WORK.PRODCLAIMS2 t1
  WHERE t1.Product_Type = "&Product"
;QUIT;
...