【问题标题】:SAS macros to save and list all macros in a session用于保存和列出会话中所有宏的 SAS 宏
【发布时间】:2023-03-19 23:41:02
【问题描述】:

我想保存作为练习的一部分永久定义的所有宏并列出所有宏。我有 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

请告诉我您对如何解决问题的建议。感谢您的宝贵时间。

【问题讨论】:

  • 你能澄清一下这个问题吗?你想知道在程序中定义了哪些宏吗?还是在程序中实际执行?
  • 是的,上面的宏实际上是在程序中定义和执行的。

标签: macros sas


【解决方案1】:

默认目录是 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;

【讨论】:

  • 谢谢。创建宏时,我在定义宏后使用了 %mend。我可以使用“options mstored sasmstore”来保存之前在此会话中创建的所有这些宏吗?是否可以将宏保存在新库中,然后使用 proc 目录列出所有宏?
【解决方案2】:

找出在您的程序中定义了哪些宏的最佳方法是不使用存储的宏目录选项。而是让 SAS 默认将它们存储为 WORK 目录。然后您可以使用 PROC CATALOG 查看已编译的宏。通常这将是 WORK.SASMACR 目录,但如果您使用的是运行 SAS 的替代方法(企业指南、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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多