2017-02-08 39 views
1

我正在準備SAS BASE測試。在測試手冊第17章讀取自由格式數據時,有一個關於如何讀取嵌入空格和非標準值的字符值的例子,例如逗號數字。我對它進行了測試,結果並不是這本書所描述的。字符值嵌入空白時修改列表輸入

data cityrank; 
infile datalines; 
input rank city & $12. pop86: comma.; 
datalines; 
1 NEW YORK 7,262,700 
2 LOS ANGELES 3,259,340 
3 CHICAGO 3,009,530 
4 HOUSTON 1,728,910 
5 PHILADELPHIA 1,642,900 
6 DETROIT 1,086,220 
7 DAN DIEGO 1,015,190 
8 DALLAS 1,003,520 
9 SAN ANTONIA 914,350 
; 

我得到的是類似下面,數據集有4個OBS。

rank city   pop86 
1 NEW YORK 7,2 2 
3 CHICAGO 3,00 4 
5 PHILADELPHIA 6 
7 DAN DIEGO 1, 8 

我錯了某處輸入程序?我一次又一次地檢查了我是否正確複製了它。

如何修改該程序?

謝謝!

+0

我想至少可以費城得到正確Pop86值,但仍然沒有。不明白爲什麼這個城市。其他因爲人物長度是12.非常有趣。 – Lin

回答

0

我從錯別字猜測你沒有複製粘貼這個,而是你輸入它。

因此,您(或書作家)由另一錯字:有空間的城市名後,沒有一個(或至少應該是)。這就是&所做的:它說「等待兩個連續的分隔符」(允許單個分隔符被忽略,因此New York被讀入一個變量而不是分割)。

所以這將是正確的:

data cityrank; 
infile datalines; 
input rank city & $12. pop86: comma.; 
datalines; 
1 NEW YORK 7,262,700 
2 LOS ANGELES 3,259,340 
3 CHICAGO 3,009,530 
4 HOUSTON 1,728,910 
5 PHILADELPHIA 1,642,900 
6 DETROIT 1,086,220 
7 SAN DIEGO 1,015,190 
8 DALLAS 1,003,520 
9 SAN ANTONIO 914,350 
; 
run; 
+0

謝謝喬!你說得對,書確實如此,連續兩個或更多的分隔符。現在它按照本書描述的那樣工作。 – Lin

+0

但是我仍然想知道在現實世界中,如果我的第一篇文章中的原始數據存在,該怎麼辦。我們應該如何正確地讀取記錄?謝謝! – Lin

+0

在現實世界中,如果沒有很多工作,你就不會有一個好的解決方案,因爲沒有明顯的方式告訴讀者「紐約」是一個領域。您可能需要執行一些預處理,可能會識別出天真的讀入將數字字段中的「YORK」,然後引用該字段(如果使用DSD選項,則會顯示「NEW YORK」作爲一個字段被讀入)。但是在現實世界中,情況往往非常混亂。 – Joe