Точка с запятой не требуется для вызовов макросов.
Часто они включаются, поскольку люди используются для обозначения точек с запятой как способ «прекращения утверждения» или окончания строки. Я лично предпочитаю включать их, когда это возможно, поскольку, по-моему, это делает мой код более удобочитаемым.
Помните, что макросы просто оценивать себя и вернуть все это, что они решают, к которым может быть блок кода, который выглядит как число, строка, или что-нибудь еще ...
Возьмем такой пример, где нет используется точка с запятой:
%macro field_list();
name,
age,
sex,
height
%mend;
proc sql;
select %field_list()
from sashelp.class
;
quit;
Попробуйте запустить его на своем компьютере с option mprint;
включена. Результат запуска макроса просто возвращает блок кода внутри него. Это приводит к следующему выполняемого кода:
proc sql;
select name, age, sex, height
from sashelp.class
;
quit;
Если бы мы имели точку с запятой после звонка в нашу макросъемки, то код, который SAS будет пытаться запустить будет включать точку с запятой, который был бы неверный синтаксис, как это (примечание точка с запятой после роста):
proc sql;
select name, age, sex, height ;
from sashelp.class
;
quit;
Это происходит потому, что точка с запятой не требуется для вызова макросов, так что он просто получает остался позади, и включается в выполнении шага.
Когда вы вызываете макрос, как вы это делаете в примере, который вы приводите выше, вполне возможно включить точку с запятой, потому что ваш макрос является полностью автономным шагом. И в открытом коде нет никакого вреда, не имея лишнюю запятую так:
%macro example2(inDS=, outDs=);
data &outDs;
set &inDs;
run;
%mend;
%example2(inDS=sashelp.class, outDs=tmp_class);
В основном это имеет значение:
data tmp_class;
set sashelp.class;
run;;
Обратите внимание на дополнительной точках с запятой в конце оставшейся от нашего разговора? Мы могли бы иметь столько, сколько мы хотели и код будет работать нормально, то есть:
%example2(inDS=sashelp.class, outDs=tmp_class);;;;;;
Преобразуется:
data tmp_class;
set sashelp.class;
run;;;;;;;
Какие еще будет работать хорошо, как он действует синтаксис.
Так что, если я понять все это правильно, я не нужна точка с запятой в конце выше макроса, потому что самое последнее высказывание имеет точку с запятой в нем, так что добавление точку с запятой% mymac (а, а) будет по существу, то же самое, что и набирать run ;; в конце заявления о средствах? – user27008
Да, это точно. –