Значение переменной SAS не соответствует указанному форматированию - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть набор данных SAS.Когда я «Просмотреть столбцы», я нахожу столбец с Type = text, length = 3, informat = $ 3., Format = $ 3.Значение, хранящееся в этой переменной, равно 10.

Но, основываясь на атрибутах, не должно ли оно храниться как 010?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Поскольку переменная представляет собой просто текст, она будет просто хранить то, что ей назначено.Например:

data have;
   length var1 $ 3;

   informat var1 $3.;

   format var1 $3.;

   input var1;

   datalines;
10 
010
;

Тот факт, что он имеет формат $ 3.не приведет к тому, что к нему будет добавлен начальный 0, как вы увидите из документации $ w .формат, где это не упоминается.Кроме того, значение может быть позже изменено на «ab»;в обоих случаях значение дополняется завершающим пробелом, чтобы составить длину 3.

0 голосов
/ 14 февраля 2019

Атрибуты говорят, что у вас есть символьная переменная, которая может содержать 3 байта (обычные кодировки символов используют один байт на символ).Вы можете хранить «010» в этой переменной или «10» или даже «10».Вы также можете хранить «ABC» или «ABC».Это просто символьная переменная.Обратите внимание, что SAS всегда хранит символьные поля фиксированной длины, поэтому более короткие значения дополняются пробелами.

Также дополнительно добавляются метаданные FORMAT, говорящие о том, что при отображении значения SAS следует использовать $ 3.формат.Точно так же имеет дополнительные метаданные, которые говорят, что при чтении текста следует использовать $ 3.Informat для преобразования входящего текста в значение для хранения.

Эти метаданные НЕ нужны, потому что SAS уже знает, как читать и отображать символьные данные.Если вы сохраняли значения с начальными пробелами, вы можете вместо этого присоединить формат $CHAR3., чтобы при записи значения сохранялись начальные пробелы.

...