2016-02-07 5 views
1

Я пытаюсь преобразовать числовую дату в формат даты и времени. Я сначала вычитаю несколько дней с даты, которую у меня есть.Преобразование числовых дат SAS в формат даты и времени

$let from_date = "21JUL2016:00:00:00"dt; 

data _null_; 
    datediff = intnx('dtday',&from_dt,-180); 
    call symput("cutoff_dt",datediff); 
run; 

После этого я получаю числовую дату, как 17633333, который прекрасно, потому что я использую эту числовую дату в проходе через запросы. Но мне также нужно преобразовать эту дату в формат даты и времени, например "21Dec2015:00:00:00"dt, чтобы я мог использовать эту дату в proc sql. До сих пор после поиска в sas-документах и ​​блогах я не мог этого сделать. Помоги пожалуйста.

ответ

2

Вы можете использовать PUT для применения формата, но если вам нужны кавычки и dt, тогда это совсем другая история. Если они вам понадобятся, я думаю, что текущая макропеременная будет работать. В противном случае у вас будет другая проблема. SQL не требует отформатированного значения, если вам не нужен символ или вы передаете его в БД. В этих случаях dt также не потребуется.

%let from_date = "21JUL2016:00:00:00"dt; 

data _null_; 
datediff = intnx('dtday',&from_dt,-180); 
call symput("cutoff_dt", put(datediff, datetime21.)); 
run; 
0

SAS хранит даты и значения даты и времени как числа. Точно так же, как в datastep , где вы можете написать «где x = '19feb2016'd» или «где x = 20503», который является номером, который SAS хранит для даты = 19feb2016, вы можете сделать то же самое в proc sql.

Вам нужно только записать значение даты в качестве символьного значения, если переменная, которую вы сравниваете, содержит дату в виде символьной строки. то есть y имеет значение «19feb2016», а x имеет значение 20503, тест, если y = x не достигнет того, что вы хотите. Это когда вам нужно писать, если y = put (x, date9.);

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