2014-06-12 35 views
3

3並且有一張我需要更新的表格。從我的理解,你可以這樣做以下:從CSV文件更新本地SAS表格

data new_table; 
    update old_table update_table; 
    by some_key; 
run; 

我的問題(當然,我有幾個?)是我在導入「update_table」從CSV文件和格式AREN」 t匹配「old_table」,所以更新失敗。

我已經嘗試使用proc sql創建「update_table」,並創建了正確的類型/格式,但無法將數據插入到其中而無需替換它。

我遇到的另一個主要問題是存在大量的列(480)和自定義格式,而且我已針對腳本的6000個字符限制運行。

我很新的SAS和任何幫助將不勝感激:)

回答

3

這聽起來像你需要使用數據的步驟在您的CSV閱讀。有很多論文解釋如何做到這一點,所以我不會在這裏介紹。這將允許您爲每個字段指定格式(數字/字符)。這裏的好處是你已經知道他們需要的格式(來自你現有的數據集),所以你可以很容易地創建這個讀取。

比方說,你的數據是這樣:

data have; 
informat x date9.; 
input x y z $; 
datalines; 
10JAN2010 1 Base 
11JAN2010 4 City 
12JAN2010 8 State 
;;;; 
run; 

現在,如果你有相同格式的CSV,您可以從上面的數據集生成的輸入碼讀取它。您可以使用PROC CONTENTS來執行此操作,也可以使用與PROC CONTENTS具有相同信息的dictionary.tables來生成它。

proc sql; 
    select catx(' ',name,ifc(type='char', '$' ,' '))into :inputlist 
    separated by ' ' 
    from dictionary.columns 
    where libname='WORK' and memname='HAVE'; 
    select catx(' ',name,informat) into :informatlist separated by ' ' 
    from dictionary.columns 
    where libname='WORK' and memname='HAVE' 
    and not missing(informat); 
quit; 

以上是兩個例子;他們可能會或可能不會滿足您的特定需求。

然後你使用它們像這樣:

data want; 
infile datalines dlm=','; 
informat &informatlist.; 
input &inputlist.; 
datalines; 
13JAN2010,9,REGION 
;;;; 
run; 

(很明顯,你會用你的CSV文件而不是datalines,這裏只是作爲例子)。

問題是您可以使用原始數據集中的元數據編寫數據步驟代碼。

+0

謝謝喬。使用元數據的數據步驟是我想我錯過的。 – user3731952