在SAS中读取txt文件时如何读取丢失的数据?

时间:2016-09-18 02:15:16

标签: sas

我是SAS新手。

我想在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%

我想要的列是' FullName',' City',' State',' Age',DOB',& #39;年''编号'和'百分比'。

我的代码是:

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

Run;

但是我收到了错误

  

9 CHAR Rutherford B. Hayes.Delaware ..Ohio..54.10 / 4 / 1822.1876.4,034,142.47.92%73       ZONE 5776676676242246767046667676222004666003303323233330333303233323330332332       NUMR 2548526F2402E081953945C1712500099F89F9954910F4F18229187694C034C142947E925   全名=。市=。状态=。年龄=。 DOB =。年= 54数=。 PercVote = 1876 ERROR = 1 N = 19   注意:第20行1-17中FullName的数据无效。   注意:20- 19-32行的城市数据无效。   注意:第20行37-40中的状态数据无效。   注意:第20行46-55中数字的数据无效。   注意:第20行62-70中PercVote的数据无效。

2 个答案:

答案 0 :(得分: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 
;

答案 1 :(得分: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;