SAS: Выполнить SQL-запрос с помощью макроса

Используя ответ из этой ветки, я пытался чтобы заставить работать следующий код. У меня есть список sql-запросов в таблице плюс идентификатор для каждого запроса. Теперь я хотел бы получить результаты этих запросов плюс идентификатор в виде другой таблицы.

/* The Macro */
%macro run_query(q,id);
  proc sql noprint;
      select count into: count
      from (&q.) a;
  quit;
%mend;

/* Some fake-data */
DATA queries;
INPUT id :$12. query :$3000.;
INFORMAT id $12.;
INFILE DATALINES DSD;
DATALINES;
01,SELECT COUNT(*) AS count FROM sashelp.bweight WHERE Married=1
0101,SELECT COUNT(*) AS count FROM sashelp.bweight WHERE Boy=1
0102,SELECT COUNT(*) AS count FROM sashelp.bweight WHERE Black=1
;
RUN;

/* Make a copy of the dataset */
DATA want;
SET queries;
RUN;

/* Insert the results */
data want;
set queries;
call execute(%nrstr(%run_query('||query||','||id||')));
run;

Кто-нибудь может увидеть, в чем проблема? Отчет об ошибке выглядит так:

введите описание изображения здесь


person D. Studer    schedule 21.04.2020    source источник
comment
Покажите текст строк из фактического журнала (не сводки), чтобы вы могли видеть, какой код помечается. Обязательно включите опцию MPRINT, чтобы вы могли видеть в журнале код, сгенерированный макросом.   -  person Tom    schedule 21.04.2020
comment
Почему у макроса второй вход? Не используется. Я не вижу, где вы заранее определили целевую макропеременную COUNT. Если он не существует, он будет локальным для макроса и исчезнет. Но, похоже, вы все равно переписываете значение при следующем вызове.   -  person Tom    schedule 21.04.2020
comment
execute() принимает строковый аргумент. Вы предоставили открытый код. Не могли бы вы попробовать цитировать его в одинарные кавычки, а не использовать %nrstr.   -  person samkart    schedule 23.04.2020
comment
Также будет полезно, если вы предоставите полный журнал, созданный SAS.   -  person samkart    schedule 23.04.2020


Ответы (2)


Частично / * Вставьте результаты * / вы в основном отправляете все свои значения / результаты в dev null с шагом данных:

data _null_;

Вместо этого попробуйте:

data want;
person sn4i1    schedule 21.04.2020
comment
Спасибо! К сожалению, это не сильно изменится, так как я все еще получаю сообщение об ошибке (см. Изображение выше). - person D. Studer; 21.04.2020

вы можете попробовать это для второй части

используйте proc sql в макросе для извлечения счетчика и построения набора данных с использованием переменных count1, count2, count3

       %macro a;
    proc sql;
    select count(*) into :count1 FROM sashelp.bweight WHERE Married=1;
    SELECT COUNT(*) into :count2 FROM sashelp.bweight WHERE Boy=1;
    SELECT COUNT(*) into :count3 FROM sashelp.bweight WHERE Black=1;
    quit;

    DATA queries;
    length id $12 query $3000;
    format id $12. query $3000.;
    infile datalines delimiter=','; 
    input id $ query $;
    datalines;
    01,&count1
    0101,&count2
    0102,&count3
    ;
    run;
  %mend a;

/*Call above maco*/
    %a;
person Shuying WEI    schedule 23.04.2020