2015-01-01 4 views
0

Я получаю сообщение об ошибке при попытке сделать формат для переменной даты.Ошибка при форматировании переменных даты в sas

Это как мои значения переменной даты выглядят, как "26-Dec-58"

"Формат $ DATE не был найден или не может быть загружен"

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

Так что я хочу преобразовать свою дату (, которая является символом) переменной в числовую переменную без введения новой переменной.

Я пробовал datepart и Подстрока опции, но все еще возникающие ошибки.

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

Текущий код:

data Practice.Sales; 
    set Practice.Sales; 
    Birthdate = '26-Dec-58'; 
    Purchase_Dt = '15-Sep-04'; 
    t_num_date = input(Birthdate, ddmmyy8.); 
    t_num_date1 = input(Purchase_Dt, ddmmyy8.); 
    drop Birthdate Purchase_Dt; 
    format Birth_date ddmmyy8. PurchaseDt ddmmyy8. Price DOLLAR10.2; 
    rename t_num_date = Birthdate; 
    rename t_num_date1 = Purchase_Dt; 
run; 
+1

Он задает вопрос - если вы жестко кодируете свои даты, почему бы не просто определить их как даты в первую очередь? 'Дата рождения = '26Dec1958'd; format Дата рождения9.; ' –

+0

В любом случае, эти утверждения не генерируют указанную ошибку. Что ты еще не показывал нам? –

ответ

0

Это невозможно изменить существующую переменную в наборе данных SAS непосредственно от персонажа к числовым. Тем не менее, вы можете создать новую числовую переменную, удаление исходной символьной переменной, а затем переименовать новый один:

data example; 
    mydate = '26-Dec-58'; 
    t_num_date = input(mydate, date9.); 
    drop mydate; 
    format t_num_date date9.; 
    rename t_num_date = mydate; 
    output; 
run; 

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

+0

данные Practice.Sales; \t набор Практика.Продажи; \t \t Дата основания = '26 -Dec-58 '; \t \t Purchase_Dt = '15 -Sep-04 '; \t \t t_num_date = input (Дата рождения, ddmmyy8.); \t \t t_num_date1 = input (Purchase_Dt, ddmmyy8.); \t \t drop Дата рождения Purchase_Dt; \t \t формат Birth_date ddmmyy8. BuyDt ddmmyy8. Цена DOLLAR10.2; \t \t rename t_num_date = Дата рождения; \t \t rename t_num_date1 = Purchase_Dt; \t \t \t run; Это мой код. Это не работает, только когда новые переменные добавляются к старой переменной со всеми точками данных как пустой. –

+0

Как я уже упоминал выше, перед переименованием вы должны применять форматы к временным переменным. Кроме того, 'ddmmyy8.' не будет работать здесь - вам нужно использовать' date9'. – user667489

+2

@Wasim. Вы должны отредактировать свой вопрос вместо почтового кода в комментариях. – Reeza

0

Этот код отлично работает для меня, но все же вновь созданных переменных поступает в последнем, как изменить что

data Practice.Sales; 
    set Practice.Sales; 
    Birth_date=datepart(input(Birthdate,anydtdtm19.)); 
    PurchaseDt = datepart(input(Purchase_Dt,anydtdtm19.)); 
     format Birth_date PurchaseDt ddmmyy8. Price DOLLAR10.2; 
     drop Birthdate Purchase_Dt; 
    run; 
+0

Переименуйте свои старые переменные в оператор набора и затем оставьте их в конце. – Reeza

+0

Учитывая ваш вопрос, где указано, что даты выглядят как 26-Dec-58, не имеет смысла использовать ввод данных datetime, поскольку нет временной части. Вы уверены, что это дает вам правильные значения? – Reeza

0

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

data Practice.Sales; 
    set Practice.Sales 
    *rename old variables; 
    (rename=(birthdate=birth_date purchase_dt=purchasedt)); 

    *use renamed variables in code; 
    Birthdate=datepart(input(Birth_date,anydtdtm19.)); 
    Purchase_Dt = datepart(input(PurchaseDt,anydtdtm19.)); 

    format Birthdate Purchase_Dt date9. Price DOLLAR10.2; 

    drop Birth_date PurchaseDt; 
run; 
0

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

data Practice.Sales; 
    format Birthdate Purchase_Dt ddmmyy8. Price DOLLAR10.2; 

    set Practice.Sales (rename =(Birthdate=oldBirth Purchase_Dt = oldPurchase)); 

    Birthdate=datepart(input(oldBirth,anydtdtm19.)); 
    Purchase_Dt = datepart(input(oldPurchase,anydtdtm19.)); 

    drop Birthdate Purchase_Dt; 
    run; 
Смежные вопросы