如何设置相对于当前目录的符号引用

时间:2014-02-07 10:57:23

标签: sas

我正在尝试将一些SAS代码从Windows移植到Linux。在Windows上运行的原始代码具有设置,其中称为“驱动器”的符号引用被硬编码到特定目录,例如“C:\ SAS”,但是如果我想将文件结构移动到Linux,我需要这个符号引用相对于包含我正在运行的.sas文件的目录。是否可以查询SAS认为包含.sas文件的目录,或者相对于.sas文件包含目录设置此符号引用。

这是一个例子。有关信息./multi_use/datetime.sas和./info确实存在

    Proc options option=work;
run;

* This first version works but is hard coded
*%let drive=%str(C:\SAS);

* This version does not work, attempting to set the symbolic reference, relatively.  
* This is an attempt to set the symbolic reference "drive" such that is the actual
* directory that the controlling .sas file is located in

%let drive=%str(.);


*********************************************************;
        %include "&drive/multi_use/datetime.sas";
        libname info "&drive/info";

2 个答案:

答案 0 :(得分:1)

如果您的访问权限已设置为发出操作系统级别的命令,那么您可能会遇到麻烦。 [我无权提交操作系统命令,因此无法提供帮助]

请参阅Functions and CALL Routines by Category中的SAS文件I / O部分,它将提供一些方便的功能,以实现您的目标。

对您的情况特别感兴趣的是:

FILENAME Function查看页面末尾的第3个示例,演示如何使用ls

FILEREF Function

FILEEXIST Function

PATHNAME Function

[以下不需要操作系统命令:]

我还建议运行proc options ; run;并检查日志以找出SAS作为其主目录的内容。您可以将SAS程序的路径设置为相对于该程序的路径。 见GETOPTION Function

答案 1 :(得分:0)

SAS没有内置方式可以告诉您当前正在执行的文件的路径/文件名。

如果您在启动SAS时位于主目录中并告诉它在不同的文件夹中运行文件(例如/tmp/myfile.sas),那么SAS使用的当前工作目录(CWD)将是您的主目录。例如:

cd ~
sas /tmp/myfile.sas

在上面的示例中,如果myfile.sas具有以下语句:

%include "blah.sas";

...它将在您的主目录(〜/ blah.sas)中查找blah.sas,而不是与您调用的文件(/tmp/blah.sas)位于同一文件夹中,因为CWD默认为wherever你是从。推出SAS的。

如果您想使其工作,可以通过在SAS会话中发出以下命令将SAS的CWD更改为/ tmp文件夹:

x cd /tmp;  * SET CWD TO THE RELATIVE PATH;

请注意,如果您通过脚本调用SAS,则脚本可能会在启动SAS之前更改路径,但上述内容可能不适用。

请注意,我没有对上述内容进行测试,因为我目前无法在Linux环境中访问SAS。