Множественные предложения To в шаге Data - PullRequest
0 голосов
/ 25 января 2019

У меня есть шаг данных, где у меня есть несколько столбцов, которые нужно привязать к одному другому столбцу.

Я попытался использовать несколько операторов "from" и "to" и пару других перестановок этого,но ничто, кажется, не добивается цели.Код выглядит примерно так:

data analyze;
set css_email_analysis;
from = bill_account_number;
to = customer_number;
output;
from = bill_account_number;
to = email_addr;
output;
from = bill_account_number;
to = e_customer_nm;
output;
run;

Я хотел бы видеть два столбца, показывающих счета-фактуры в столбце «от», и другие значения в «до», но вместо этого я получаю счет-счети его номер клиента, с некоторыми "..." для других значений.

1 Ответ

0 голосов
/ 29 января 2019

Выпуск

Это наиболее вероятно, потому что 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 работает за сценой.

  1. Оператор data устанавливает выходное местоположение
  2. Оператор set добавляет переменные из первого наблюдения набора данных, указанного в пространство в памяти, называемое PDV, наследуя длины и типы данных.

PDV:

bill_account_number|customer_number|email_addr|e_customer_nm
===================================================================
010101             |            758|me@my.com |John Smith
  1. Оператор 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, либо число)

  1. Последующие операторы 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;
...