2016-05-08 4 views

ответ

2

Если переменная имеет значения символов, то это значение символа, а не числовой. Вам также нужно исправить это. Я бы предложил использовать функцию anyalpha(), чтобы определить, можете ли вы преобразовать ее в число.

If anyalpha(old_var)=0 then new_var = input(old_var, best12.); 
-1

Вы можете просто умножить переменную на 1; это заменяет все числовые значения хранятся в виде символьных значений с их числовыми коллегами и заполнит все символьные значения как отсутствующий:

data temp; 
    input var $; 
    datalines; 
    Hello 
    1 
    <3 
    3 
    Note1 
    5 
; 
run; 

data temp2; 
    set temp; 
    var2 = var * 1; 
run; 

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

+0

Зачем писать код, который приводит к предупреждениям, когда есть много других допустимых способов его решения? –

0

Вы можете использовать функцию ввода для преобразования от символа в числовой.

new_var = input(old_var, ?? best.); 

немедленной подачи опции ?? перед Informat, вы инструктаж SAS подавить любые предупреждающие сообщения или заметки было бы нормально печатать, когда он встречает проблему, применяющее Informat.

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

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