SAS: выполнить SQL -запрос с использованием макроса - PullRequest
0 голосов
/ 21 апреля 2020

Используя ответ из этой ветки, я пытался заставить работать следующий код. У меня есть список 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;

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

enter image description here

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

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

data _null_;

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

data want;
0 голосов
/ 23 апреля 2020

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

использовать pro c 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;
...