我想将宏存储在目录中。这样做可以让许多宏只与一个文件共享,并且引入了与用户分离的程度。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:认证准备指南,第4部分,第12章,“使用存储的编译宏”一节中,“Sasmacr是唯一可以存储编译宏的目录,您可以在任何SAS库中创建一个名为Sasmacr的目录。不要重命名此目录或其条目。“是否可以将'sasmacr'本身存储在一个可能具有唯一名称的目录中? –
解决方案有几个不同的_folders_,至少据我可以告诉SAS你会这样做。然后libname到每个文件夹。这就是你的第二个评论的答案:把每个文件夹放在一个唯一的文件夹中,然后将libname放到每个文件夹中,这实际上就是你所描述的所有意图和目的。 – Joe