gpt4 book ai didi

SAS - 如何确定哪些库在 SASAUTOS 中

转载 作者:行者123 更新时间:2023-12-04 17:51:35 31 4
gpt4 key购买 nike

PATHNAME()GETOPTION() 函数为 SASAUTOS 返回不同的结果,让人怀疑哪些目录用于 AUTOCALL。 SASAUTOS 是否作为碰巧拥有相同名称的两个不同“事物”而存在?

为了提供一些背景知识,我维护了一个用于个人实用程序宏的目录,该目录的路径已添加到我的配置文件中。

-SET SASAUTOS (

"!SASROOT\core\sasmacro"
"!SASROOT\aacomp\sasmacro"
"!SASROOT\accelmva\sasmacro"
"!SASROOT\assist\sasmacro"
"!SASROOT\dmscore\sasmacro"
"!SASROOT\ets\sasmacro"
"!SASROOT\gis\sasmacro"
"!SASROOT\graph\sasmacro"
"!SASROOT\hps\sasmacro"
"!SASROOT\iml\sasmacro"
"!SASROOT\or\sasmacro"
"!SASROOT\qc\sasmacro"
"!SASROOT\stat\sasmacro"
"C:\USERS\ME\PERSONAL AUTOCALL"
)

这符合预期。当我加载 SAS 时,我可以调用 PERSONAL AUTOCALL 目录中的任何宏。

我还运行一个复杂的过程,需要大量特定于问题的宏。它们位于与我的 PERSONAL AUTOCALL 不同的目录中。由于这些宏应该独立于运行进程的任何人使用,因此它们不包含在配置文件中。相反,我让 SAS 从 session 中将目录加载到自动调用搜索层次结构中。我通过发布以下声明来做到这一点。

options mautosource mrecall sasautos = (SASAUTOS, 'Z:\Path\To\COMPLEX PROCESS AUTOCALL');

同样,这符合预期。当第一个参数 SASAUTOS 从选项语句中排除时,只能调用 COMPLEX PROCESS AUTOCALL 宏,反之亦然。

当我监视自动调用搜索层次结构中的目录时,问题就出现了。为此,我发出:

%put %sysfunc(pathname(sasautos));

这会返回上面给出的我的配置文件中给出的精确列表。它缺少 COMPLEX PROCESS AUTOCALL 路径,尽管 SASAUTOS= 选项包含它并且这些宏是可调用的。

如果我改为发出

%put %sysfunc(getoption(sasautos));

然后返回以下内容。

(SASAUTOS, "'C:\Path\To\COMPLEX PROCESS AUTOCALL'")

虽然这两个 %put 语句的组合提供了我认为是自动调用库的完整列表,但我不知道为什么需要这两个语句。

PATHNAME()返回数据库的名称,在本例中为 SASAUTOS,至少在当前 session 的上下文中应该附加 COMPLEX PROCESS AUTOCALL

GETOPTION()返回 SAS 系统选项的值。显然,系统选项与数据库不同。

不同的返回值是否确实意味着存在两种不同的SASAUTOS“东西”,一个是库,另一个是选项?如果是这样,他们如何互动?鉴于这种意外的差异,我如何确定除了列出的目录之外没有搜索其他目录?

最佳答案

是的,SASAUTOS 在这里是两件事。这是一个system option and a fileref . (请注意,它不是一个库;在大多数方面它与一个库并没有明显的不同,但它不是一个库。重要的是,您不能在 SASAUTOS 中使用普通的点表示法引用 SAS 数据集。)

fileref SASAUTOS 默认从配置中的 SASAUTOS 选项(或启动时的选项)创建,并设置 OPTION SASAUTOS 指向那个(而且只有那个)最初。从上面链接的文档页面看:

SAS automatically generates a fileref named SASAUTOS. This is the default value of the SASAUTOS= option and points to all the SAS autocall macros.

通常不要弄乱它很重要,因为 SAS 使用它来定位系统宏。欢迎您在配置中添加 fileref 的路径,但请确保您不要将其从 SASAUTOS 选项中删除。

要完成您想要做的事情,我会说您有三个选择。

一种是将GETOPTION和PATHNAME结合起来,可以看到;您只需要将 GETOPTION 的结果附加到 PATHNAME 的结果即可。实际上,您可以将其自动化;使用 GETOPTION,然后如果任何结果看起来像 filerefs(8 个字符或更少,没有点或\或其他),则在它们上运行 PATHNAME 并附加结果。

二是从 fileref 中删除您的个人宏库,而是将其附加到您的 autoexec 中。不过,在附加其他库时,您必须始终小心地附加它。

三是创建一个第二个 fileref,并将任何附加路径附加到该fileref。这很好,因为您可以确定 OPTION SASAUTOS 只有两个值(fileref SASAUTOS 和您的 MYAUTOS fileref),然后您只需追加您的新文件(使用 PATHNAME 获取当前加载的路径,然后添加到该路径,然后重新定义文件引用)。这可能是最容易维护的,只要您小心始终正确地重新定义它(创建一个宏 (!) 来执行此操作...)

它还有一个优点是其他程序员可以简单地制作他们自己的核心文件引用并且程序仍然适用于他们(如果他们有不同的宏库),当然他们的宏库最好包含项目所需的宏.

关于SAS - 如何确定哪些库在 SASAUTOS 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44285695/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com