Верьте или нет, потому что вы определили свой макрос с пустым списком параметров:
%macro Trend();
%put TREND running;
%mend trend;
Когда вы пытаетесь вызвать макрос как %trend
SAS ожидает, что вы отправите ему список параметров, даже пустого списка будет достаточно. Таким образом, вызов макроса не закончился. Точка с запятой завершит вызов макроса, но вы правы в том, что он не нужен, и это плохая привычка добавлять лишние точки с запятой. Когда вы вызываете макрос, у которого определен список параметров (даже в этом случае, если в определении макроса в круглых скобках было 0 параметров, так что список все еще определен в некотором смысле), вы можете вызвать его как %trend()
. Скобки завершают вызов макроса.
С ПК SAS вы можете проверить это, выделив %trend
и отправив его. Макрос не запустится. Затем, если вы отправите ()
, макрос запустится.
Обновление :
Так как исправление вызова макроса не сработало, я подозреваю, что это может быть ошибкой в том, как сканер слов распознает оператор endrsubmit. Предполагая, что это можно воспроизвести, я бы добавил комментарий с точкой с запятой. По крайней мере, так ясно, что точка с запятой не является частью завершения вызова макроса. Извините, я не могу выполнить тестирование, поскольку SAS / соединение недоступно.
Что-то вроде:
* endrsubmit needs a semicolon before it ??? ;
endrsubmit ;