Выпуск
Это наиболее вероятно, потому что SAS имеет два типа данных, и при первой установке переменной to
она имеет значение customer_number
. В вашем втором операторе to
вы пытаетесь установить для to
значение email_addr
. Предполагая, что email_addr
является символьной переменной, здесь могут произойти две вещи:
- Customer_number - это число -
to
уже задано как число, поэтому SAS не может заставить to
стать символом, может появиться такая ошибка:
ПРИМЕЧАНИЕ. Недопустимые числовые данные, me@mywebsite.com, в строке 15, столбец 8. to =.
ОШИБКА = 1 N = 1
- Customer_number - это символ -
to
был задан как символ, но без явного определения его длины, если он окажется короче значения email_addr
, тогда адрес электронной почты будет сокращен. SAS не выдаст ошибку, если это произойдет:
Код:
data _NULL_;
to = 'hiya';
to = 'me@mydomain.com';
put to=;
run;
short=me@m
to
имеет длину 4, и SAS не расширяет ее для соответствия новым данным.
Деталь
Здесь нужно иметь в виду, как SAS работает за сценой.
- Оператор
data
устанавливает выходное местоположение
- Оператор
set
добавляет переменные из первого наблюдения набора данных, указанного в пространство в памяти, называемое PDV, наследуя длины и типы данных.
PDV:
bill_account_number|customer_number|email_addr|e_customer_nm
===================================================================
010101 | 758|me@my.com |John Smith
- Оператор
to
добавляет еще одну переменную, наследующую характеристики customer_number
PDV:
bill_account_number|customer_number|email_addr|e_customer_nm|to
===================================================================
010101 | 758|me@my.com |John Smith |758
(to
это либо длина символа 3, либо число)
- Последующие операторы
to
не изменят характеристики переменной, и SAS продолжит обработку
PDV (если customer_number является символом = TRUNCATION):
bill_account_number|customer_number|email_addr|e_customer_nm|to
===================================================================
010101 | 758|me@my.com |John Smith |me@
PDV (если номер_пользователя является числовым = ОШИБКА ДАННЫХ, to
установлено как отсутствующее):
bill_account_number|customer_number|email_addr|e_customer_nm|to
===================================================================
010101 | 758|me@my.com |John Smith |.
Разрешение
Для решения этой проблемы, вероятно, проще всего установить длину и тип to
перед первым оператором to
:
data analyze;
set css_email_analysis;
from = bill_account_number;
length to $200;
to = customer_number;
output;
...
Вы можете получать такие сообщения, когда SAS преобразовал данные от вашего имени:
ПРИМЕЧАНИЕ. Числовые значения были преобразованы в символьные
значения в местах, заданных: (строка) :( столбец).
27: 8
N.B. нет необходимости явно определять длину и тип from
, потому что, насколько я вижу, вы можете получить значения этой переменной только из одной переменной в исходном наборе данных. Этого также можно добиться с помощью переименования, если вам не нужно хранить переменную bill_account_number
:
rename bill_account_number = from;