Во-первых, у меня есть следующая таблица:SAS Proc SQL внутри% макро
data dataset;
input id $ value;
datalines;
A 1
A 2
A 3
A 4
B 2
B 3
B 4
B 5
C 2
C 4
C 6
C 8
;
run;
Я хотел бы написать макрос, так что пользователь может подмножество данных, давая значение идентификатора. Я делаю ргос SQL внутри макроса следующим образом:
%macro sqlgrp(id=,);
proc sql;
create table output_&id. as
select *
from dataset
where id = '&id.'
;
quit;
%mend;
%sqlgrp(id=A); /*select id=A only*/
Я способен генерировать таблицу output_A в работе библиотеки, однако он имеет ноль (0) наблюдения.
Почему это не работает?
Благодаря @mjsqu. спасибо за разъяснение разницы между одинарной кавычкой и двойной цитатой. У меня есть один вопрос: есть ли разница между & id. и & id (без.) Еще раз спасибо. – useR
Не совсем, в этом случае либо сделают. Период (.) Указывает SAS, где заканчивается макро-переменная, и чаще используется, когда макропеременная немедленно сопровождается чем-то другим. Попробуйте запустить следующее с и без периода (.): '% Let id = A;% put &id._x;' – mjsqu
Возможно, было бы полезно добавить имена ввода и вывода в макроподпись, например,% macro sqlgrp (in =, id = out =), чтобы пользователи не переопределили вывод – Kostya