Ошибка импорта, даже если переменная отброшена 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;