2016-03-24 6 views
0

Я продолжаю получать этот код ошибки снова и снова, с разными номерами строк, конечно.SAS Неверные данные для переменной

NOTE: Invalid data for VAR4 in line 264808 30-30. 
RULE:----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+ 
264808 F113Q1008712|201506|43003.27|R|28|332|N||||3.375|0|201412|||| 61 
VAR1=F113Q1008712 VAR2=201506 VAR3=43003.27 VAR4=. VAR5=28 VAR6=332 VAR7=N VAR8= VAR9= 
VAR10= VAR11=3.375 VAR12=0 VAR13=2 VAR14= VAR15= VAR16= VAR17= _ERROR_=1 _N_=264808 

После достаточно времени, я это происходит я получаю этот код ошибки:

WARNING: Limit set by ERRORS= option reached Further errors of this type will not be printed. 

Я предполагаю, что это проблема с разделителем (труба «|» в моем случае). Я нашел еще один question, который сказал:

«Если это фактически табуляция, вам может потребоваться вместо этого использовать dlm='09'x». Думаю, моя проблема в том, что я не понимаю, как кодировать. (Я просто использую SAS для дополнения моего тезиса, поэтому многое из этого учится, когда я собираюсь.) Где бы я положил dlm='09'x и помог бы мне в моем случае.

Я также нашел комментарий another question, который сказал:.

«за $ делает его символьной переменной, а не числовая переменная, которая почти наверняка отменяют любые ошибки Informat (поскольку символьные переменные являются очень гибкими), но вона «дайте вам обязательно правильные результаты. :)»

После прочтения этих ответов я считаю, что мне нужно как-то сказать SAS принять численное значение, которое может появиться в Var4, а также переменное значение «R». Есть ли способ заставить SAS принять либо. Или мне просто придется изменить все мои «R» на числовое значение?

Если это поможет, я ввода в SAS, используя этот код:

proc import datafile="E:\2013\historical_data1_time_Q12013.txt" 
    out=TYr2013Q1 
    dbms=dlm 
    replace; 
    delimiter='|'; 
    getnames=no; 
run; 

Спасибо за любую помощь. Это очень ценится.

+0

Я не вижу никаких признаков того, что ваши данные являются табуляцией, я вижу PIPE |. VAR4 определяется PROC IMPORT как числовое, но в строке 264808 или ваши данные, которые он находит R. Я думаю, что недостающее утверждение может быть полезно. –

+0

Что такое значение «R»? Как «Отказался»? Или это какая-то значимая долина? – Joe

+0

R означает, что он был дефолт так долго, что получил Repossessed. – Fmonkey2001

ответ

1

В этом примере показано, как использовать оператор MISSING для считывания символа R как отсутствующего R .R в числовую переменную с помощью PROC IMPORT.

enter image description here

filename FT15F001 temp; 
proc import datafile=FT15F001 out=test replace dbms=dlm; 
    missing r; 
    delimiter='|'; 
    getnames=no; 
    guessingrows=1; 
    parmcards; 
1|2|3|4 
1|r|3|5 
;;;; 
    run; 
+0

Спасибо за ответ! По моим данным, «R» означает, был ли дом убран или нет. Итак, используя оператор MISSING, он все еще подсчитывает количество «R»? – Fmonkey2001

+0

Причина, по которой я спрашиваю, заключается в том, что любое число в столбце Var4 подразумевает, что они не выполнили свои обязательства по кредиту. Возрастающее число просто говорит, как долго оно было дефолтом. «R» задается, когда они были в зоне по умолчанию так долго, что дом взят. Поэтому я хочу, чтобы каждый R подсчитывался по отношению к общему числу значений по умолчанию. Если это имеет смысл. – Fmonkey2001

+0

PROC IMPORTED предположил, что VAR4 является числовым на основе строк угадывания. По-видимому, первое было в строке 264808. Имея недостающее значение .R, вы сможете суммировать данные и подсчитывать количество строк с .R. Однако вы перешли от чтения данных к резюме, возможно, это должна быть новая тема. –