2016-09-18 17 views
0

私はSASを初めて使用しています。SASでtxtファイルを読み込むときに欠けているデータを読み取る方法は?

私はSASでtxtファイルを読んでみたいです。ファイルによっては、一部の行にデータが欠落していることがあります。

例えばデータは次のとおりです。私が欲しい

James Monroe  Monroe Hall   Virginia   58 4/28/1758 1816 
John Quincy Adams Braintree   Massachusetts  57 7/11/1767 1824 113,142 30.92% 
Andrew Jackson  Waxhaws Region  South/North Carolina 61 3/15/1767 1828 642,806 55.93% 
Martin Van Buren Kinderhook   New York 54 12/5/1782 1836 763,291 50.79% 
William Henry Harrison Charles City County  Virginia 68 2/9/1773 1840 1,275,583 52.87% 

列は「フルネーム」、「市」、「州」、「年齢」、DOB「 『年』、 『番号』と」ありますパーセンテージ '。

私のコードは次のとおりです。

infile 'C:\sasfiles\testfile.txt' missover dlm='09'x dsd 
input FullName City State Age DOB Year Number PercVote; 

Run; 

しかし、私はエラー

9 CHARラザフォードB. Hayes.Delaware ..Ohio..54.10/4/1822.1876.4,034,142.47.92%73を取得します ZONE 5776676676242246767046667676222004666003303323233330333303233323330332332 NUMR 2548526F2402E081953945C1712500099F89F9954910F4F18229187694C034C142947E925 のFullName =。市=。状態=。年齢=。 DOB =。年= 54番号=。 PercVote = 1876 ERROR = 1 N = 19 注:20行目のFullNameのデータが無効です。1-17。 注:20行目のCityのデータが無効です。19-32。 注:行20の状態のデータが無効です。37-40。 注:行番号46-55のNumberのデータが無効です。 注:20行目のPercVoteデータが無効です62-70。

+0

を?あなたはあなたの日付ヴァルスの情報を持っていますか?または文字列ですか? – Reeza

+0

@Reeza、私はinformatsはありません。 – Bigeyes

+0

それらを使用してみてください。 MISSOVERをTRUNCOVERに変更します。 @Reeza。 – Reeza

答えて

1

適切に解析できる形式でデータを提供する必要があります。

区切られたデータを使用する場合は、隣接する区切り文字を使用して値の欠落があることを示します。変数を使用する前に定義することが最善です。あなたがそれらを順番に定義すれば、あなたの入力ステートメントは非常に簡単になります。

data want ; 
    infile cards dsd dlm='|' firstobs=2 truncover ; 
    length name $13 city $11 state $15 age 8 dob 8 yod 8 ; 
    input name -- yod ; 
    informat dob mmddyy10.; 
    format dob yymmdd10.; 
cards; 
----+----0----+----0----+----0----+----0----+----0----+----0----+----0 
James Monroe|Monroe Hall|Virginia||4/28/1758|1816 
John Quincy Adams|Braintree|Massachusetts|57|7/11/1767|1824 
; 

強制的にデータを列に入れ、列入力を使用します。

data want ; 
    infile cards firstobs=2 truncover ; 
    input name $ 1-13 city $ 19-29 state $ 31-45 age 47-48 @50 dob mmddyy10. yod 61-64; 
    format dob yymmdd10.; 
cards; 
----+----0----+----0----+----0----+----0----+----0----+----0----+----0 
James Monroe  Monroe Hall Virginia   4/28/1758 1816 
John Quincy Adams Braintree Massachusetts 57 7/11/1767 1824 
; 
+0

質問の編集をクリックすると、タブ区切りの元のデータ行をコピーして貼り付けることができます。ブロッククォートされたタブは、このサイトのスペースとして表示されます。 – user667489

+0

パイプを見ることができるので、ポストはポストするほうがはるかに優れています。 – Tom

+0

'Dob'を数値形式にするべきかどうか分かりません。私は 'yymmdd10.'が数学計算をすることができるかどうか分からないので?その長さは8より大きい。 – Bigeyes

0

このお試しください:すべてのコードにはできません

data want; 
infile cards dlm='09'x missover; 
input (FullName City State) (:$32.) Age :8. DOB :mmddyy9. Year :4. Number :comma8. PercVote :percent8.; 
format DOB mmddyy10. number comma16. percvote percent6.2; 
cards; 
James Monroe  Monroe Hall   Virginia   58 4/28/1758 1816 
John Quincy Adams Braintree   Massachusetts  57 7/11/1767 1824 113,142 30.92% 
Andrew Jackson  Waxhaws Region  South/North Carolina 61 3/15/1767 1828 642,806 55.93% 
Martin Van Buren Kinderhook   New York 54 12/5/1782 1836 763,291 50.79% 
William Henry Harrison Charles City County  Virginia 68 2/9/1773 1840 1,275,583 52.87% 
; 
run; 
関連する問題