Ошибка импорта, даже если переменная отброшена SAS

Я импортирую файл, разделенный точкой с запятой, как таковой

ID    Segment    Number    Date     Payment
1     A1         103RTR    10OCT17  10
2     A1         205FCD    11OCT17  11
...

SAS не нравится сочетание цифр и символов, когда я импортирую этот текстовый файл, используя этот код:

proc import
out=want (drop=Number)
datafile="have"
dbms=dlm
replace;
delimiter=';';
options validvarname=v7 missing='';
run;

Даже если я не пытаюсь загрузить номер, который в реальном наборе данных намного длиннее, например, 12 чисел, за которыми следуют четыре символа, он возвращает эту ошибку в журнал

NOTE: Invalid data for Number in line 22157 21-30.
 WARNING: Limit set by ERRORS= option reached.  Further errors of this type will not be printed.
 ERROR: Import unsuccessful.  See SAS Log for details.

Я хотел бы сделать типичный infile и informat, но имея 32 переменные и 2 миллиона строк, я просто не могу найти время, чтобы выяснить, в каком диапазоне и стиле должна быть прочитана каждая переменная. Поэтому я спрашиваю, есть ли способ отформатировать эту конкретную переменную, но придерживаться простоты импорта процедур.

Но я также спрашиваю, влияет ли это на мой импорт? так как данные выглядят нормально при проверке вывода.

1 ответ

Решение

Я хотел бы сделать типичный infile и informat, но имея 32 переменные и 2 миллиона строк, я просто не могу найти время, чтобы выяснить, в каком диапазоне и стиле должна быть прочитана каждая переменная. Поэтому я спрашиваю, есть ли способ отформатировать эту конкретную переменную, но придерживаться простоты импорта процедур.

Плохая идея, мусор внутри = мусор, и вы имеете дело только с 32 переменными, так что это на самом деле не так уж плохо. Потратьте время на то, чтобы очистить и импортировать данные правильно, окупаясь, и вы узнаете о данных в процессе, что ускоряет дальнейший анализ. Этот шаг не пустая трата времени. После импорта набора данных рекомендуется запустить PROC MEANS и PROC FREQ и просмотреть вывод, чтобы убедиться, что он прочитан правильно.

proc means data=have;
run;

proc freq data=have;
run;

Задавать GUESSINGROWS=MAX в ПРОЦЕСС ИМПОРТА. Это вынуждает SAS сканировать весь файл перед его импортом, что с большей вероятностью будет правильным. Если вы автоматизируете этот процесс и читаете файл более одного раза, возьмите код из журнала и используйте его вместо PROC IMPORT, как только вы проверили данные.

И оператор option не должен быть в шаге PROC IMPORT, он идет раньше.

options validvarname=v7 missing='';

proc import
out=want (drop=Number)
datafile="have"
dbms=dlm
replace;
delimiter=';';
guessingrows=max;
run;
Другие вопросы по тегам