2017-05-31 117 views
1

PATHNAME()GETOPTION()函數返回不同的結果SASAUTOS,這使人懷疑什麼目錄用於AUTOCALL。 SASAUTOS是否存在兩個不同的「事物」具有相同的名稱?SAS - 如何確定哪些庫位於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將目錄從會話中加載到自動調用搜索層次結構中。我通過發表以下聲明來做到這一點。

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應該已經附加有COMPLEX PROCESS AUTOCALL,至少在當前會話的上下文內。

GETOPTION()返回SAS系統選項的值。顯然,系統選項與數據庫不同。

不同的返回值的確意味着存在兩個不同的「事物」,一個是圖書館,另一個是選擇?如果是這樣,他們如何互動?鑑於這種意想不到的差異,我怎麼能確定沒有其他目錄正在被搜索?

回答

1

是的,SASAUTOS是兩件事。這是一個system option and a fileref。 (請注意,它不是一個庫;在大多數情況下,它不是一個真正意義上的不同於庫,但它不是一個。重要的是,您不能用正常的點符號在SASAUTOS中引用SAS數據集。)

fileref SASAUTOS默認情況下是從config中的SASAUTOS選項(或啓動時的選項)創建的,並且設置OPTION SASAUTOS以指向最初(並且僅限於此)。從上面的鏈接文檔頁中查看:

SAS會自動生成名爲SASAUTOS的文件引用。這是SASAUTOS =選項的默認值,並指向所有SAS自動調用宏。

重要的是不要惹禍,因爲它被SAS用來定位系統宏。歡迎您在配置文件中添加fileref的路徑,但除此之外請確保不要將其從SASAUTOS選項中刪除。

做你想要做什麼,我會說你有三個選擇。

一是GETOPTION與PATHNAME結合起來,你可以看到;您只需將GETOPTION的結果附加PATHNAME的結果即可。實際上,你可以實現自動化。使用GETOPTION,然後如果任何結果看起來像filerefs(8個字符或更少,沒有點或\或其他)運行PATHNAME並追加結果。

二是從fileref刪除您的個人宏庫,而是在你的自動執行其追加。不過,你必須小心,以便在附加其他庫時始終追加它。

三是製作一個 fileref,並附加任意其他路徑到該fileref。這很好,因爲你可以肯定OPTION SASAUTOS只有兩個值(fileref SASAUTOS和你MYAUTOS fileref),然後你只需要你的新文件附加到(使用PATHNAME來獲取當前加載的路徑,然後添加到這一點,那麼重新定義fileref)。這可能是最簡單的維護,只要你小心總是重新定義它(創建一個宏(!)來做到這一點...)

它還具有其他程序員可以簡單地製作自己的優點核心fileref和該程序仍然適用於他們(如果他們有不同的宏庫),當然他們的宏庫更好地包含該項目所需的宏。

+0

SAS沒有用於自動創建在所有平臺上SASAUTOS fileref。我必須創建它以確保Unix和Windows環境都相似。也許現在呢? – Tom

+0

@Tom那麼,該頁面是通用的(不是來自操作系統細節),所以 - 也許?不幸的是,我還沒有unix SAS進行測試,但我想SAS/UE在技術上是合格的? – Joe

+0

添加fileref - 整潔的 - 因爲這也應該圍繞着多少值可以是限制/限制得到'insert'ed到SASAUTOS。 –

相關問題