2016-12-27 2 views
0

У меня есть переменная с именем ID на наборе данных OLD, и мне нужно изменить длину от 13 до 12 для слияния. Ниже приведены метаданные, связанные с этой переменной.Изменение переменной длины без получения предупреждения

Variable Type Len Format Informat Label 
ID  Char 13 $12.  $12. 'Person ID' 

(Содержание каждого значения для ID всегда ровно 12 символов в этом файле)

Когда я пытаюсь изменить длину до заданного оператора в шаге DATA, я получаю предупреждение. То же самое происходит, когда я редактирую как длину, так и формат.

data NEW; 
length ID $12; 
format ID $12.; 
set OLD; 
run; 

... 
WARNING: Multiple lengths were specified for the variable AN_RESEARCHID by 
      input data set(s). This can cause truncation of data. 

Примеры из форумов сообщества SAS, похоже, не описывают причину возникновения этого предупреждения или как его избежать. Есть предположения?

+0

Вы также должны выяснить, почему у вас есть переменная с длиной $ 13, но который имеет формат 12 $. и информацию в размере 12 долларов США. постоянно прикрепленный к нему. Возможно ли, что 13-й символ не пуст, но что вы просто не видите значения из-за формата, который прилагается? – Tom

+0

Спасибо за совет. Том. Я подтвердил, что 13-й символ действительно пуст - похоже, что человек, который генерировал случайные идентификаторы в восходящей программе, задал длину, большую, чем цифры целого числа, которое они назначили. – JMQ

ответ

4

Вы можете переименовать исходную переменную в инструкцию SET и создать новую переменную с нужной длиной. Затем установите новую переменную равной старому на этапе данных. Вы не получите предупреждение. Но, конечно же, о том, что он предупреждает о том, что вы все еще держится, то есть, если ваши данные имеют 13 символов, он усекает значение, забивая его в переменную с более короткой длиной.

data NEW(drop=ID_orig); 
length ID $12; 
set old(rename=(ID=ID_orig)); 
ID= ID_orig; 
run; 
2

Ответ дается Amw5G как я бы решить эту проблему, если я не мог исправить первоначальную настройку длины удостоверения личности. Однако вы должны исследовать изменение первоначального назначения длины на предыдущем шаге.

Некоторые причины, что переменная получает нежелательную длину являются:

Если символ VAR присваивается значение, не LENGTH заявления, то вар примет длину первого значения, присвоенного ему. EXAMPLE

Если символ VAR присваивается функции, как SCAN, он может получить длину 200. CAT функция возвращает длину суммы длин значений, находящихся сцепляются. EXPLANATION

+0

Jay - ваши ссылки на примеры и документация действительно полезны. Большое спасибо за вашу помощь! – JMQ

2

Существует опция SAS под названием varlenchk. Установив его временно на NOWARN, вы можете изменять длину без предупреждения.

options varlenchk = nowarn; * Turn off the warning prior to your operation; 

/* your operations here */ 

options varlenchk = warn; * put it back on to be safe!; 

Смотрите эту ссылку для подробностей:

http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a003269301.htm

Смежные вопросы