2014-12-22 5 views
2

Я пытаюсь читать это фиксированные данные ширины в SAS:Чтение фиксированной ширины файла - пробелы распознаются

John Garcia  114 Maple Ave. 
Sylvia Chung 1302 Washington Drive 
Martha Newton 45 S.E. 14th St. 

Я использовал этот код:

libname mysas 'c:\users\LELopez243\mysas'; 
filename address 'c:\users\LELopez243\mysas\address.dat'; 
data mysas.address2; 
infile address; 
input Name $ 1-15 Number 16-19 Street $ 22-37; 
run; 
proc print data=mysas.address2; 
run; 

Получил этот результат:

Obs Name   Number Street 
1 John Garcia  114  Sylvia Chung 1 
2 Martha Newton 45 

Если я отредактирую файл .dat и вручную добавлю пробелы в конце каждой строки, пока они не будут иметь одну и ту же длину, код будет работать. Любые идеи для кода, которые учитывают разные длины строк (без ввода пробелов вручную).

+0

Ну не дал вам неправильный результат, не знаю, почему это происходит. Я выполнил тот же код, но под оператором datalines и получил правильные результаты. – NEOmen

+1

Попробуйте добавить опцию truncover в конец инструкции infile. – Reeza

+0

@Reese .. Ну, это не тот случай, когда отсутствуют столбцы, мне интересно, как здесь будет работать «truncover». – NEOmen

ответ

2

Добавьте опцию транслирования в свою информацию о неверности.

Truncover переопределяет поведение по умолчанию оператора INPUT, когда запись входных данных короче, чем ожидает инструкция INPUT. По умолчанию оператор INPUT автоматически считывает следующую запись входных данных. TRUNCOVER позволяет вам читать записи переменной длины, когда некоторые записи короче, чем ожидает инструкция INPUT. Переменные без каких-либо назначенных значений считаются отсутствующими.

http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000146932.htm

libname mysas 'c:\users\LELopez243\mysas'; 
filename address 'c:\users\LELopez243\mysas\address.dat'; 
data mysas.address2; 
infile address truncover; 
input Name $ 1-15 Number 16-19 Street $ 22-37; 
run; 
proc print data=mysas.address2; 
run;