Я хочу хранить макросы в каталоге. Это позволяет многим макросам делиться только одним файлом, а также вводит степень разделения от пользователя.SAS: Переименование каталога макросов
Чтобы сохранить свой макрос, я запускаю программу, такие как
/* HelloWorld.sas */
libname pwd "."; /* assign current directory */
option mstored sasmstore=pwd; /* set pwd as storage directory */
%macro HelloWorld()
/store source; /* store compiled macro along with its source */
data _null_;
put "Hello, World!";
run;
%mend;
Это создает sasmacr.sas7bcat
файл в каталоге, в котором HelloWorld.sas
жизни. Затем я могу переместить этот файл в другой каталог, например C:\myMacros
и запустить следующую программу:
/* CallHelloWorld.sas */
libname myMacros 'C:\myMacros';
option mstored sasmstore=myMacros;
%HelloWorld();
Макрос HelloWorld()
вызывается без ошибок.
Однако, если я хочу рассмотреть HelloWorld()
макрос как часть «HelloWorld» макро ванной, я не могу просто изменить имя каталога в проводнике Windows из sasmacr.sas7bcat
в HelloWorld.sas7bcat
. Когда я это сделаю и снова попробую запустить CallHelloWorld.sas
(после закрытия и повторного открытия SAS) макрос не будет разрешен.
1 /* CallHelloWorld.sas */
2 libname myMacros 'C:\myMacros';
NOTE: Libref MYMACROS was successfully assigned as follows:
Engine: V9
Physical Name: C:\myMacros
3 option mstored sasmstore=myMacros;
4
5 %HelloWorld();
-
180
NOTE: The SAS System was unable to open the macro library referenced by the SASMSTORE = libref
MYMACROS.
WARNING: Apparent invocation of macro HELLOWORLD not resolved.
ERROR 180-322: Statement is not valid or it is used out of proper order.
ERROR: Catalog MYMACROS.SASMACR does not exist.
NOTE: The SAS System was unable to open the macro library referenced by the SASMSTORE = libref
MYMACROS.
ERROR: An error occurred during the execution of the %COPY statement.
Как изменить имя каталога, содержащего макросы, чтобы эти макросы могли вызываться в различных программах? Можно ли назвать каталог чем-то отличным от sasmacr
спереди?
Я категорически заявляю, что есть веские причины для получения макросов в каталоге с уникальным именем. Ключ может делиться конкретными макросами проекта с другими людьми. Каталог, как представляется, является единственным контейнером, который SAS распознает. Без каталога макросы должны существовать как отдельные файлы в какой-то момент перед загрузкой. Это риск потери, модификации и т. Д. Это ограничивает контроль. Кроме того, одно имя каталога становится проблемой при работе над несколькими проектами с теми же людьми. У человека может быть несколько файлов 'sasmacr', каждый из которых соответствует другому проекту. Решение - это отдельные имена каталогов. –
Из SAS: Руководство по подготовке к сертификации, раздел 4ed, глава 12, раздел «Использование хранимых скомпилированных макросов», «Sasmacr - это единственный каталог, в котором могут храниться скомпилированные макросы. Вы можете создать каталог Sasmacr в любой библиотеке SAS. не переименуйте этот каталог или его записи. " Можно ли хранить 'sasmacr' сам в каталоге, который может иметь уникальное имя? –
Решение имеет несколько разных _folders_, по крайней мере, насколько я могу судить, SAS бы вы сделали. Затем libname для каждой папки. Это ответ на ваш второй комментарий: поместите каждый в уникальную папку, затем libname в каждую папку, которая эффективно описывает все, что вы описали для всех целей и задач. – Joe