2017-02-08 6 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

私はあなたがコピー貼り付けしていないタイプミスを推測していますが、代わりにそれを入力しました。

このように、あなた(または本の作家)は別のタイプミスを犯しました。2つの都市名の後ろにのスペースがあります(少なくとも1つは必要ありません)。これは&の機能です:「2つの連続した区切り文字を待つ」ということです(1つの区切り文字が無視されるので、New Yorkは区切りの代わりに1つの変数に読み込まれます)。

だから、これは正しいでしょう:

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

ありがとうジョー!あなたと本は、そのように、2つ以上の連続する区切り文字を言っています。今、本の説明どおりに動作します。 – Lin

+0

しかし、現実の世界では、私の最初の投稿の生データが存在するかどうかは疑問です。私たちはレコードを正しく読むために何をすべきですか?ありがとうございました! – Lin

+0

現実の世界では、 "NEW YORK"は1つのフィールドであることを読書に伝える明確な方法がないため、かなりの労力を要することなく、良い解決策はありません。素朴な読み込みが "YORK"を数字フィールドに入れ、フィールドを引用することを示す前処理をしなければならないでしょう( "NEW YORK"はDSDオプションを使用すると、 1つのフィールドとして読み込まれます)。しかし、現実世界のシナリオでは、しばしば非常に乱雑です。 – Joe

関連する問題