sas чтение файлов с пробелом в качестве разделителя - PullRequest
0 голосов
/ 28 августа 2018

У меня есть файл данных, который использует пробел в качестве разделителя. Я хочу написать шаг данных, чтобы прочитать этот файл в sas.

Поля не разделены одним пробелом, в большинстве случаев поля разделены более чем 10 пробелами. Я проверил с помощью notepad ++, а разделители не являются табуляцией.

137          3.35          Afghanistan                      2009-07-08 
154          2.43          Albania                          2009-07-22
101          1.22          Antigua and Barbuda              2009-06-24 
155          4.13          Federated States of Micronesia   2009-07-22

Я пытался написать информативные заявления для них, но безуспешно

Вот что я сделал до сих пор

input casedt1id: $ 3. продолжение: 4 страны: & 32 $. casedt1 ггмдд10.

Это правильно читает только первое поле, а остальные получают пропущенные значения.

Вопрос заключается в том, чтобы написать заявление informat для чтения этих данных?

спасибо за помощь.

С уважением джан

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Для меня это похоже на данные фиксированного столбца. Тогда проблема заключается в использовании INFORMAT с фиксированными данными столбцов. Это должно работать

input casedt1id $ 1-3 contntid 4-27 country $28-60 casedt1 yymmdd10.;
format casedt1 yymmdd10.;

Хитрость заключается в том, чтобы убедиться, что указатель находится в правильном месте, когда он пытается прочитать форматированный текст. Таким образом, в приведенном выше заявлении это делается путем чтения его в столбце 60 «СТРАНА». Итак, теперь вы находитесь в столбце 61, когда вы готовы прочитать дату. Вы также можете использовать + или @ для перемещения указателя.

... @61 casedt1 yymmdd10. ...

Если вы читаете из файла переменной длины (большинство файлов теперь имеют переменную длину), убедитесь, что добавили опцию TRUNCOVER в оператор INFILE на тот случай, если дата отсутствует или записана с использованием менее 10 символов.

0 голосов
/ 28 августа 2018

Вы можете использовать символ @, чтобы контролировать, откуда указатель читает строку. Похоже, у вас есть фиксированный начальный столбец для каждой переменной.

data want;
input @1 casedt1id :$3. @14 contntid :4 @28 country :&$32. @61 casedt1 :yymmdd10.;
format casedt1 yymmdd10.;
datalines;
137          3.35          Afghanistan                      2009-07-08 
154          2.43          Albania                          2009-07-22
101          1.22          Antigua and Barbuda              2009-06-24 
155          4.13          Federated States of Micronesia   2009-07-22
;
...