【发布时间】:2017-02-09 21:22:20
【问题描述】:
基于此post,我可以使用以下代码获取程序中已编译宏的列表,按首次出现的顺序排列:
%macro FirstMacro();
%put Hello, World!;
%mend;
%macro SecondMacro();
%put Goodbye, cruel world!;
%mend;
proc sql;
select objname, created
from dictionary.catalogs
where objtype='MACRO' and libname ^= 'SASHELP'
order by created
;
quit;
然而,这会以大写形式给出所有宏。
Object Name Date Created
--------------------------------------------------
FIRSTMACRO 09FEB17:16:12:31
SECONDMACRO 09FEB17:16:12:31
我使用PascalCase 作为我的宏名称(如上图所示)。有没有办法获得类似的列表,但保留区分大小写?
似乎PROC SCAPROC 可能会提供这样一个列表,但我不清楚。有一个note 来自 PROC SCAPROC 首次发布(在 9.2 中),它表明 PROC SCAPROC 不支持何时使用 %MACRO。但是,该说明说这将成为未来版本的 SAS 的一个功能。对于 SAS 9.4,尚不清楚该功能是否已添加。
我能想到的唯一另一种选择是用其他语言编写一个脚本,分析上面的文本以获取宏名称。
【问题讨论】:
-
这个特定练习的目的是什么? IE,一旦你有了这个列表,它会被用来做什么?
-
宏名称不区分大小写,那么为什么 SAS 会以混合大小写的形式存储它们?
-
@Tom 我猜(我问这个原因)OP 正在使用它来生成代码和/或用于 EG 插件来改进相当有限的宏自动完成功能,并希望将 PascalCase 文本作为输出。 (如果 OP 确实为此编写了一个插件,我很想拥有它,和/或帮助编写它 - 这将是一个超级有用的工具!)
-
在我的特殊情况下,我需要该列表用于文档目的。