2010-03-03 143 views
9

我有很多SAS格式的文件,我希望能夠在SAS之外的程序中讀取它們。我除了安裝基本SAS系統外沒有其他任何東西。我可以手動轉換每一個,但我想要一種方法自動執行。如何讀取SAS數據集?

+0

你想吃點什麼程序/格式閱讀呢?你將使用哪種編程語言? – 2010-03-03 19:19:09

+0

我正在使用Python。我沒有指定程序或格式,因爲我不想限制迴應;如果有方法通過DLL或API讀取數據,我相信我可以弄清楚如何調用它。但是,我無法找到任何方法,無需從SAS獲得許可其他程序。 – 2010-03-03 20:07:32

+0

會寫一個SAS宏將每個計數轉換爲自動解決方案嗎? – 2010-03-04 08:19:57

回答

6

您需要有一個正在運行的SAS會話充當數據服務器。然後您可以使用ODBC訪問SAS數據,請參閱SAS ODBC drivers guide

爲了獲得本地SAS ODBC服務器上運行,你需要:

  1. 在SAS ODBC驅動程序指南描述定義你的SAS ODBC服務器設置。在下面的例子中,我將連接到一個名爲「loclodbc」的服務器。
  2. 在你的服務文件中添加一個條目,(C:\ WINDOWS \ SYSTEM32 \ DRIVERS \ etc \ services中),就像這樣:

    • loclodbc 9191/TCP

    ...集端口號(這裏是:9191),以便它適合您的本地設置。服務「loclodbc」的名稱必須與ODBC設置中定義的服務器名稱匹配。請注意,術語「服務器」與您的PC的物理主機名無關。

您的SAS ODBC服務器現在可以運行,但沒有可用的分配數據資源。通常情況下,您可以在SAS ODBC設置過程中的「庫」選項卡中設置此選項,但由於您要「即時」指向數據源,因此我們忽略了這一點。

在您的客戶端應用程序中,您現在可以連接到SAS ODBC服務器,指向要訪問的數據資源並獲取數據。

SAS指向數據資源的方式是通過「LIBNAME」的概念。 libname是一個數據集合的邏輯指針。

因此

LIBNAME sasadhoc 'C:\sasdatafolder'; 

分配的文件夾 「C:\ sasdatafolder」 的邏輯句柄 「sasiodat」。

如果從內部SAS希望獲得居住在SAS數據表文件中的數據「C:\ sasdatafolder \ test.sas7bdat」,你會做這樣的事情:

LIBNAME sasadhoc 'C:\sasdatafolder'; 
PROC SQL; 
    CREATE TABLE WORK.test as 
    SELECT * 
    FROM sasadhoc.test 
    ; 
QUIT; 

因此,我們需要要做的是告訴我們的SAS ODBC服務器從我們的客戶端應用程序分配一個libname到C:\ sasdatafolder。我們可以通過使用DBCONINIT參數在啓動時發送此資源分配請求來完成此操作。

我已經做了一些示例代碼。我的示例代碼也是用BASE SAS語言編寫的。由於顯然有更聰明的方法來訪問SAS數據,比SAS通過ODBC連接到SAS,此代碼僅作爲示例。

您應該能夠採取有效位,創造您所使用的編程環境,自己的解決方案......

SAS ODBC連接的示例代碼:

PROC SQL; 
    CONNECT TO ODBC(DSN=loclodbc DBCONINIT="libname sasadhoc 'c:\sasdatafolder'"); 
    CREATE TABLE temp_sas AS 
    SELECT * FROM CONNECTION TO ODBC(SELECT * FROM sasadhoc.test); 
QUIT; 

神奇的發生在代碼的「CONNECT TO ODBC ...」部分,將libname分配給所需數據所在的文件夾。

+0

實際上,你不需要運行SAS會話; ODBC驅動程序會自動爲您啓動一個。但是,以編程方式創建ODBC配置並不容易,所以必須手動配置。這是一個問題,因爲您不能只加載任意數據集。 – 2010-03-11 20:15:01

+0

任意,你可能的意思是「位於任何地方,任何名稱」...?或者它是作爲參數給出的? – 2010-03-11 21:46:52

+0

位於任何地方,任何名稱。 – 2010-03-12 00:03:42

2

我想你可能能夠使用ADO, 查看SAS support site瞭解更多詳情。

免責聲明:

  1. 我沒有看過這一段時間
  2. 我不是100%肯定,這並不需要額外的許可
  3. 我不知道,如果你能做到這一點使用Python
2

我從來沒有嘗試過http://www.oview.co.uk/dsread/,但它可能是你在找什麼:「一個簡單的命令行實用程序,用於在SAS7BDAT文件格式的數據集進行操作。」但請注意「這個軟件應該被認爲是實驗性的,並不能保證是準確的,你自己承擔風險,它只能在未壓縮的Windows格式SAS7BDAT文件上工作。」

3

您可以製作一個SAS到CSV的轉換程序。

保存在sas_to_csv.sas如下:

proc export data=&sysparm 
    outfile=stdout dbms=csv; 
run; 

然後,假設你想按如下方式訪問libname.dataset,這個程序叫做:

sas sas_to_csv -noterminal -sysparm "libname.dataset" 

的SAS數據轉換成CSV可以輸送到Python。在Python中,以編程方式生成「libname.dataset」參數將非常簡單。