2017-10-10 120 views
0

我想了解如何讀取SAS格式不正確的數據。波紋管是片段,也是我嘗試的開始。我也試着做一個if語句,但不知道如何爲每一行聲明一個格式。例如:讀取格式不正確的數據

if _N_ then [format for this line goes here];

data prob2; 
length name $ 8 ; 
infile rawdata(Group2.txt) truncover; 
input Code Name X Y Z; 
proc print data=prob2; 
run; 

的樣本數據:

10 Arnold 123 21 333 
20 Barbara 11 387 
30 176 265 3876 
Daniel 154 39876 
50 Elmo 176 256 33 
60 Fifi 198 298 
70 Gizmo 288 354 
80 376 
90 Isaac 100 267 322 

預期輸出:

Code Name  X Y  Z 
----------------------------- 
10 | Arnold | 123 | 21 | 333 
20 | Barbara| 11 | 387| . 
30 |  . | 176| 265| 3876 
. | Daniel | 154| 39| 876 
50 | Elmo | 176| 256| 33 
60 | Fifi | 198| 298| . 
70 | Gizmo | 288| 354| . 
80 | . | 376| . | . 
90 | Isaac | 100| 267| 322 
----------------------------- 
+0

請發表你已經嘗試了什麼,以及你期望的輸出是什麼。例如,最後的第二行應該是什麼?你能假定一個空格是分隔符嗎? – Reeza

+0

我已經發布,現在,兩個。我試過的是數據區上方的片段,最後一個塊是預期的輸出。 – StillLearningToCode

+0

嘗試'infile rawdata(Group2.txt)delimter =''dsd;' – david25272

回答

0

david25272的解決方案是工作。

option missing=.; 

data begin; 
    INFILE DATALINES DLM=' ' dsd; 
    input Code Name $ X Y Z; 
    datalines; 
10 Arnold 123 21 333 
20 Barbara 11 387 
30 176 265 3876 
Daniel 154 39876 
50 Elmo 176 256 33 
60 Fifi 198 298 
70 Gizmo 288 354 
80 376 
90 Isaac 100 267 322 
; 
run; 

主要生產

Code Name X Y Z 
10 Arnold 123 21 333 
20 Barbara 11 387 . 
30  176 265 3876 
. Daniel 154 . 39876 
50 Elmo 176 256 33 
60 Fifi 198 298 . 
70 Gizmo 288 354 . 
80  376 . . 
90 Isaac 100 267 322 

然而,這是空間敏感,如果可能的話,我建議增加一個分隔符,以您的數據。使用簡單的替換功能非常簡單。

編輯:發現在輸入數據的精彩論文: http://www2.sas.com/proceedings/sugi29/253-29.pdf