2013-12-02 3 views
0

У меня есть набор данных с числовыми данными. Код ниже:SAS Недопустимые данные

data test; 
infile 'C:\Users\Public\Documents\Test\test.dat'; 
input a1 a2 a3 a4 b1 b2 b3 b4; 
run; 

proc print data=test; 
run; 

Когда я запускаю это я получаю следующие сообщения об ошибках:

NOTE: Invalid data for a1 in line 1 1-51. 
NOTE: Invalid data for a2 in line 2 1-50. 
NOTE: Invalid data for a3 in line 3 1-50. 
NOTE: Invalid data for a4 in line 4 1-50. 
NOTE: Invalid data for b1 in line 5 1-51. 
NOTE: Invalid data for b2 in line 6 1-51. 
NOTE: Invalid data for b3 in line 7 1-51. 
NOTE: Invalid data for b4 in line 8 1-51. 
RULE:  ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+- 

8 CHAR 18.597.6.261.4.032.0.215.-0.099.32.580.36.430.1.038 51 
    ZONE 332333032333032333032333023233303323330332333032333 
    NUMR 18E59796E26194E03290E2159D0E099932E580936E43091E038 

Как это исправить? Появляется ли это сообщение об ошибке, потому что цифры имеют слишком много цифр?

Добавлено. Вот некоторые примеры строк из моих данных:

21.312 7.039 5.326 .932 -.030 35.239 36.991 1.057 
21.206 6.979 5.237 .871 .015 35.713 36.851 1.064 

Также здесь другая часть сообщения об ошибке:

NOTE: Invalid data errors for file ''C:\Users\Public\Test\test.dat'' occurred 
     outside the printed range. 
NOTE: Increase available buffer lines with the INFILE n= option. 
+0

Можете ли вы дать нам пример строки или двух данных из вашего файла? –

+0

@JohnChrysostom: Я добавил несколько строк. – user21478

+0

Ваш код, кажется, отлично работает с этими пробами ... Вы уверены, что месторасположение файла верное? Кроме того, можете ли вы захватить некоторые строки, содержащие недопустимые данные? –

ответ

1

. как разделитель путая его. Он пытается читать 18.579.6.261 ... как число. Что это не так, что вызывает ошибку. Если возможно, используйте пробел в качестве разделителя, и ваше заявление будет работать.

+0

Что такое разделитель пространства? 'delim =" "'? – user21478

3

Похоже, что SAS видит каждую строку как одну переменную, а не одно наблюдение с несколькими переменными, что говорит о том, что он неправильно распознает разделитель. Если, как и в строках, которые вы отправили, разделитель - это пробел, ваш код должен работать. Кроме того, вы можете убедиться, что он использует пространство разделителей, выполнив следующие действия:

data test; 
    infile "C:\Users\Public\Documents\Test\test.dat" dlm=" "; 
    input a1 a2 a3 a4 b1 b2 b3 b4; 
run; 

Если это на самом деле табуляция, возможно, потребуется использовать dlm='09'x вместо этого.

Сообщите нам, если это поможет.

+0

Разделитель табуляции сделал трюк. Благодарю. – user21478

Смежные вопросы