2015-11-21 131 views
0

我正在讀取SAS中的.csv文件,其中一些字段由空值.填充到主文件中,少數則填充5位SAS日期。我需要SAS將字段識別爲日期字段(或者至少是一個數字字段),而不是像文本一樣在文本中讀取它。讀取日期字段中爲空值的.csv文件

我的代碼的簡化版本是這樣:

data test; 
informat mydate date9.; 
infile myfile dsd dlm ',' missover; 
input 
myfirstval 
mydate 
; 
run; 

有了這個代碼,所有的值都讀取爲.和字段數據類型爲文本。任何人都可以告訴我在上面的代碼中需要更改以獲得我需要的輸出嗎?

感謝

+0

你的例子是一個數據步驟。在數據步驟中,除了您編程的內容之外,它絕不會做任何事情。您是否在談論如PROC IMPORT這樣的一些實用程序的行爲,在讀取CSV文件時必須猜測數據結構? – Tom

+0

我正在使用datastep中的infile語句讀取它。 – gdogg371

+0

'5位SAS日期'是什麼意思?您是否在談論表示自1/1/1960以來的天數的整數值?如果是這樣,然後將它們作爲數字讀取並附上像DATE9這樣的格式。給他們,而不是'INFORMAT'。 – Tom

回答

0

如果你寫一個數據步來讀取CSV文件SAS將創建變量爲您指定的數據類型。如果您告訴它MYDATE是一個數字,它不會將其轉換爲字符變量。

data test; 
    infile cards dsd dlm=',' TRUNCOVER ; 
    length myfirstval 8 mydate 8 mythirdval 8; 
    input myfirstval mydate mythirdval; 
    format mydate date9.; 
cards; 
1,1234,5 
2,.,6 
; 

請注意,數據步驟編譯器將在第一次機會時定義變量的類型。例如,如果第一個引用是在像IF MYDATE='.' ...這樣的語句中,則MYDATE將被定義爲字符長度1,以匹配與其進行比較的值的類型。這就是爲什麼最好從LENGTHATTRIB聲明開始明確定義您的變量。