2008-09-23 48 views
2

我需要將SAS數據錶轉換爲平面文件(或「ASCII文件」,因爲它們被調用一次,而不是二進制文件)。每個原始SAS表只有一個平面文件。 具有挑戰性的事情是,我想要的平面文件包含原始SAS表的一些結構信息還,具體爲:將SAS數據(包括表結構)存儲在一個單一的平面文件中

  • 變量/列名
  • 變量/列標籤
  • 變量/列類型
  • 變量/柱長
  • 變量/列格式
  • 變量/列了信息

其他信息:

  • 我只需要較小的數據(< 100 OBS)轉換。
  • 表現不是問題(在合理範圍內)。
  • 平面文件應該形成重新創建原始SAS表格的基礎,我不需要能夠將該文件直接用作DATA或PROC步驟中的表格。

標準SAS表,傳輸文件,XPORT文件等都是二進制格式文件,SAS和CSV文件中的標準XML表格格式不保留表格結構。所以顯然這些選項並沒有幫助。

我最好的選擇是什麼?

+0

請問爲什麼你需要這個?這聽起來像是這個問題假設解決更大問題的一部分。有了更多的上下文,可能會提出更好的整體解決方案。 – Rog 2010-02-18 21:57:18

+0

我的應用程序有一些小尺寸的配置數據。我想讓這些數據跟隨我的應用程序源代碼下游,通過檢查他們到我的版本控制系統。我構建了一個應用程序,可將我的二進制格式元素(如各種商品)轉換爲平面文件格式,反之亦然。這種自制系統是圍繞二進制元素數量和平面文件元素之間一一對應的概念而構建的。 – 2010-02-19 09:04:47

回答

4

我不知道任何簡單的解決方案。

可能:

  1. 使用PROC EXPORT產生CSV在它的數據文件。
  2. 使用PROC DATASETS和ODS生成一個包含名稱,類型等的數據集。
  3. 爲此數據集生成另一個CSV文件。

現在你已經獲得了表格的ASCII描述(分佈在兩個CSV文件中)。顛倒過程會更棘手。基本上你必須閱讀描述數據集,然後在循環中使用CALL SYMPUT來創建一堆帶有其中信息的宏變量,然後使用宏變量爲CSV文件構建一個PROC IMPORT ...

-1

如果你只打算在SAS使用數據,那麼你可以只用PROC COPY,使傳輸文件:

http://www.usc.edu/isd/doc/statistics/sas/sastransport/

+0

傳輸文件是二進制格式。我正在尋找一種平面文件格式,或者曾經被稱爲「ASCII文件」的內容。 – 2008-09-23 18:45:46

3
  1. 創建代碼表中導出到文本(這很簡單,它只是谷歌或看「小SAS書」,如果你有一個副本)。

  2. 然後從sashelp.vcolumn追加'meta'信息,這是sas存儲有關sas數據集的信息(元數據)的地方。它本身就是一個sas表,因此您可以執行一個proc sql union操作,將其與該表描述的實際列進行連接(儘管您需要執行轉置類型操作,因爲有關列的元數據位於行中,而不是列)。

對於如何在文本文件中查看元數據,您並沒有完全明確,所以這就是我所能做到的。

+0

我實際上使用這個將我的表數據導出到MySQL – Mindwin 2014-04-10 20:50:00

2

PROC SQL的語法描述可能是很方便的獲取元數據部分,包括長度,類型,格式,索引等...

代碼:

proc sql; 
describe table sashelp.class; 
quit; 

登錄:

NOTE: SQL table SASHELP.CLASS was created like: 

create table SASHELP.CLASS(bufsize=4096) 
    (
    Name char(8), 
    Sex char(1), 
    Age num, 
    Height num, 
    Weight num 
); 
0

順便說一句 - 你沒有說過你爲什麼需要這樣做。在這種情況下,沒有什麼好的理由(可能有一個令人信服的理由,比如有人用電話 說'這樣做,或者被解僱',但是沒有好的原因)。

我放棄了合併每個文件中的元數據和數據的想法,除非有一些令人難以置信的強有力的理由這樣做。繼續將數據集A的元數據導出到名爲metadata_A的文件中;這將導致配對的文件。任何想要在數據庫程序或統計程序中使用這些文件的人都可以使用清晰標記的元數據文件。

1

使用SAS 9.2,您可以從數據集創建XML文件,並且XML包含變量/列元數據,例如格式,標籤等等。請參閱SAS 9.2 XML LIBNAME引擎:用戶指南中標題爲「使用XML引擎跨操作環境傳輸SAS數據集」。一個鏈接是在這裏:

http://support.sas.com/documentation/cdl/en/engxml/61740/HTML/default/a002594382.htm

下面是手動可顯示使用XML92 LIBNAME引擎和PROC COPY創建XML的代碼段:

libname myfiles 'SAS-library'; 
libname trans xml92 'XML-document' xmltype=export; 
proc copy in=myfiles out=trans; 
    select class; 
run; 

在SAS 9.1。 3,您可能必須創建一個自定義標記集以獲得相同的操作。 SAS技術支持([email protected])可能會提供一些幫助。

相關問題