Модификатор формата двоеточия SAS - PullRequest
0 голосов
/ 23 апреля 2020

enter image description here

Что означают цифры в сером поле? И какой простой способ понять, как модификатор двоеточия влияет на способ чтения sas в значениях?

1 Ответ

1 голос
/ 23 апреля 2020

Ответ зависит от непредоставленной информации. Ответ B - лучший выбор в том смысле, что вы должны использовать модификатор двоеточия при использовании информаторов в операторе INPUT, чтобы предотвратить использование форматированного режима ввода вместо режима ввода списка. В противном случае отформатированный ввод может прочитать слишком много или слишком мало символов, а также может оставить курсор в неправильном месте для чтения следующего поля.

Но если вы попытаетесь прочитать эти данные с линейных карт, это будет работать нормально для этих двух строк. Это связано с тем, что строки данных в строке дополняются до следующего кратного 80 байтам.

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

Попробуйте сами. TEST1 и TEST3 работают. TEST2 получает сообщение LOST CARD.

data test1;
  input name $ hired date9. age state $ salary comma10.;
  format hired date9.;
cards;
Donny 5MAR2008 25 FL $43,123.50
Margaret 20FEB2008 43 NC 65,150
;

options parmcards=test;
filename test temp ;
parmcards;
Donny 5MAR2008 25 FL $43,123.50
Margaret 20FEB2008 43 NC 65,150
;

data test2;
  infile test;
  input name $ hired date9. age state $ salary comma10.;
  format hired date9.;
run;

data test3;
  infile test truncover;
  input name $ hired date9. age state $ salary comma10.;
  format hired date9.;
run;

С другими данными первый форматированный ввод может также вызвать проблемы. Например, если бы значения даты использовали только 2 цифры для года, это отбросило бы все. Поэтому он пытается прочитать FL как возраст, а затем читает первые 8 символов зарплаты как STATE и просто пропускает как SALARY.

data test1;
  input name $ hired date9. age state $ salary comma10.;
  format hired date9.;
cards;
Donny 5MAR08 25 FL $43,123.50
Margaret 20FEB2008 43 NC 65,150
;

Результаты:

Obs    name            hired    age    state       salary

 1     Donny       05MAR2008      .    $43,123.         .
 2     Margaret    20FEB2008     43    NC           65150
...