用于保存和列出会话中所有宏的SAS宏

时间:2018-04-26 09:31:01

标签: macros sas

我想保存作为练习一部分永久定义的所有宏,并列出所有宏。我有6个宏,我想在此会话中保存和检索:

%macro one(a,b,c)
%macro gchart(dseti,Weight,Gender)
%macro plot(dsetin,height,weight)
%macro one(a,b,c,strtpt,endpt)
%macro test
%macro name(dsetin,year,revenue)
%macro import_myfile(i=)

我有以下代码,后面会出现错误信息。

options mstored sasmstore=macross; 
libname mjstore "C:\Users\komal\Desktop\Advanced SAS"; 
 proc catalog cat=mjstore.macross;
      contents;
      title "Default Storage of SAS Macros";
     quit

Error: Catalog "MJSTORE.MACROSS" not found

请告诉我你如何解决它的建议。谢谢你的时间。

2 个答案:

答案 0 :(得分:0)

默认目录为WORK.SASMACR

%macro one(a,b,c); %mend;
%macro gchart(dseti,Weight,Gender); %mend;
%macro plot(dsetin,height,weight); %mend;
%macro one(a,b,c,strtpt,endpt); %mend;
%macro test; %mend;
%macro name(dsetin,year,revenue); %mend;
%macro import_myfile(i=); %mend;

proc catalog cat=work.SASMACR;
   contents;
   title "Default Storage of SAS Macros";
   quit;

答案 1 :(得分:0)

找出程序中定义的宏的最佳方法是不使用存储的宏目录选项。而是让SAS默认存储一个WORK目录。然后,您可以使用PROC CATALOG查看已编译的宏。通常这将是WORK.SASMACR目录,但如果您使用其他方式运行SAS(Enterprise Guide,SAS / Studio,存储过程服务器等),则可能是WORK.SASMACR1目录。

proc print data= sashelp.vcatalg width=min;
  where libname='WORK' and memname='SASMACR'
    and memtype='CATALOG' and objtype='MACRO'
  ;
  var objname modified objdesc ;
run;

如果您使用自动调用宏,则较新版本的SAS会将​​文件名存储在元数据的OBJDESC字段中。否则,这是一个指向宏的链接,该宏将生成已编译宏的列表,并尝试将它们与自动调用库或您可能提供的其他目录中的相应源文件进行匹配。 https://github.com/sasutils/macros/blob/master/maclist.sas