2014-02-07 28 views
1

我試圖將一些SAS代碼從Windows移植到Linux。在Windows上運行的原始代碼有一些設置,稱爲「驅動器」的符號引用被硬編碼到特定目錄,如「C:\ SAS」,但是如果我想將文件結構移動到Linux,我需要此符號引用相對於包含我正在運行的.sas文件的目錄。是否有可能查詢SAS認爲是包含.sas文件的目錄還是設置相對於.sas-file包含目錄的此符號引用。howto設置相對於當前目錄的符號引用

這裏是一個例子。對於信息都./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"; 
+0

如何在Linux環境中啓動SAS?你直接調用可執行文件嗎?或者你是通過別名腳本來調用它? –

回答

1

如果您的接入已經建立發行操作系統級的命令,那你大概可以敲東西了。 [我沒有訪問提交OS命令所以沒有太大的幫助]

請參閱SAS文件I/O在Functions and CALL Routines by Category部分,這將提供一些方便的功能來實現你的正在嘗試做的。

您的情況特別令人感興趣的是以下幾點:

FILENAME Function看向演示如何使用ls頁結束第三個例子。

FILEREF Function

FILEEXIST Function

PATHNAME Function

[以下就不需要OS命令:]

我也建議運行proc options ; run;並檢查日誌要弄清楚什麼是SAS看到作爲它的主目錄。您可以將SAS程序的路徑設置爲相對於該路徑。 請參閱GETOPTION Function

0

SAS沒有內置的方式可以告訴您它正在執行的文件的路徑/文件名。

如果您在啓動SAS並告訴它在不同文件夾(例如./tmp/myfile.sas)中運行文件時位於主目錄中,那麼SAS使用的當前工作目錄(CWD)將會是你的主目錄。例如:

cd ~ 
sas /tmp/myfile.sas 

在上面的例子中,如果myfile.sas有如下語句:

%include "blah.sas"; 

...這將尋找你的home目錄blah.sas(〜/ blah.sas),而不是與您調用的文件(/tmp/blah.sas)在同一文件夾中,因爲CWD默認情況下是從哪裏啓動SAS的。

如果你想讓它工作,你可以SAS的CWD在你的SAS會話中發出以下命令更改到/ tmp文件夾:

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

請注意,如果您通過調用SAS腳本,那麼腳本可能會在啓動SAS之前更改路徑,上面的內容可能不適用。

請注意,我還沒有測試上述,因爲我目前沒有在Linux環境中訪問SAS。

相關問題