2016-05-30 66 views
0

如何在SAS中讀取以下數據?讀取逗號值

Yellowstone   ID/MT/WY 1872 * 4,065,493 
Everglades   FL 1934 *  1,398,800 
Yosemite    CA 1864 *   760,917 
Great Smoky Mountains NC/TN 1926 *  520,269 
Wolf Trap Farm  VA 1966 *    130 

對於最後一欄我只得到:

406549 
1 
. 
520 
. 

代碼:

data math; 
    input 
     parkname $ 1-22 
     state $ 
     year 
     asteriks $ 
     value COMMA9.; 
    datalines; 
Yellowstone   ID/MT/WY 1872 * 4,065,493 
Everglades   FL 1934 *  1,398,800 
Yosemite    CA 1864 *   760,917 
Great Smoky Mountains NC/TN 1926 *  520,269 
Wolf Trap Farm  VA 1966 *    130 
; 

proc print data=math; 
run; 

回答

2

你的問題是,*後的空間也算的數字,所以如果你有9個空格,數字爲空,8個空格,您只能獲得第一個數字,依此類推...

E DIT:

谷歌搜索了一下,發現了很多簡單的解決方案。添加&告訴SAS忽略多個空白,所以

value & COMMA9.; 

應該解決這個問題,最簡單的方法,至少它沒有在你的testprogram。

編輯結束

最簡單的我能想到的解決方案將刪除所有空格,除了一個*後,或添加其他分隔符(#爲例)或增加值的大小:

Yellowstone   ID/MT/WY 1872 * 4,065,493 
Everglades   FL 1934 * 1,398,800 

data math; 
infile datalines delimiter='#'; 
... 
Yellowstone#ID/MT/WY#1872#*#4,065,493 
... 

value COMMA20.; 
+0

我無法修改源文件,所以只有最後才適用於我。如果我在這些數字之後還有另一個變量呢? – PNPTestovir

+1

@PNPTestovir:就我所知,這應該沒有問題,因爲第一個空白總是用作分隔符,所以空白之間的所有內容都將被識別爲變量。另一個選擇是在你的infile上運行壓縮,這將刪除多個空白並將它們減少到一個。 – kl78

+1

@PNPTestovir:找到了另一種與您的測試數據配合使用的解決方案,將其添加到我的答案中,也許這對您的案例更好。 – kl78