2016-05-30 6 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で行いました。私は考えることができる

編集終了

最も簡単な解決策は、*の後に1以外のすべてのスペースを削除、または別の区切り文字(例えば#)を追加したり、値のサイズを大きくするために、次のようになります。

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の圧縮を実行することです、これは複数の空白を削除し、1に減らします。 – kl78

+1

@PNPTestovir:あなたのテストデータで動作する別の解決策を見つけ、それを私の答えに加えました。 – kl78

関連する問題