Макрос, который вы создали, генерирует инструкцию TITLE. Так что должно работать нормально.
Но ваша программа использует его не в том месте. Как только ваш макрос запустится и завершит генерацию текста оператора TITLE, ваш шаг данных будет выглядеть так:
data HelloWorld;
msg = Title "Hello World, today is Thursday, 10JAN19"; ;
run;
Что, очевидно, приведет к ошибке, поскольку в правой части оператора присваивания теперь есть два токена, переменная с именем TITLE и строковая константа, без какого-либо оператора между ними. Дополнительная точка с запятой просто сгенерирует дополнительный нулевой оператор и не вызовет никаких проблем.
Возможно, вы хотите создать макрос VARIABLE вместо реального макроса?
Для этого ваша программа будет выглядеть примерно так.
%let msg=Hello World, today is &Sysday, &Sysdate ;
data HelloWorld;
msg = "&msg." ;
run;
Таким образом, когда ссылка на макропеременную будет заменена, будет выполнен запуск этого кода SAS.
data HelloWorld;
msg = "Hello World, today is Thursday, 10JAN19" ;
run;
Обратите внимание, как вы используете &
для запуска оценки макропеременной. Также обратите внимание, что я не добавил кавычки к значению макропеременной, но включил их в код SAS, который был создан с использованием значения макропеременной.
Обратите внимание, что у него есть вчерашний день недели и дата. Это связано с тем, что автоматические макропеременные SYSDAY
и SYSDATE
устанавливаются при запуске SAS, и я запускал этот код в сеансе SAS, который я начал вчера.