2015-04-24 3 views
0

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

В таблице Sybase имеет строковые значения, как этот

2015-04-23 04:04:46.517 
2015-04-22 04:04:35.162 
2015-04-21 04:04:43.646 

мне нужно, чтобы получить максимум из этих значений и хранить его в max_tmsp переменной и получить записи, где last_updt_tmsp > max_tmsp.

Я упомянул об этом link и попытался написать код, но он не работает.

Весь этот код находится в Precode перед запуском задания.

proc sql noprint; 

SELECT 

select max(input(PROPERTY_VAL, MDYAMPMw.d)) into :last_updt_tmsp 

from sybase_lib.prop_vals where property_key='last.update.date'; 

quit; 

format &last_updt_tmsp. DATETIME18.; 

data _null_; 

call symput('lst_cre_dttm',"'"||"&last_updt_tmsp."||"'dt"); 

run; 

%put lst_cre_dttm=&lst_cre_dttm 
+1

"? Но это не работает", не особенно полезно Что происходит, когда вы используете этот код –

+0

Кроме того, код, который вы опубликовали, не имеет смысла. Операторы 'format' недействительны в открытом коде, и вы дважды выбираете' 'дважды в шаге SQL. –

ответ

0

Собирая ответ и прокомментировать ответ

Data HAVE; 
length PROPERTY_VAL $23; 
Input PROPERTY_VAL $ 1-23; 
Datalines; 
2015-04-23 04:04:46.517 
2015-04-22 04:04:35.162 
2015-04-21 04:04:43.646 
; 
Run; 

proc sql noprint; 
select max(input(PROPERTY_VAL, anydtdtm24.)), 
     max(input(PROPERTY_VAL, anydtdtm24.)) format=datetime22.3 
into :last_updt_tmsp, :last_updt_tmsp_f 
from HAVE; 
quit; 

%Put LAST_UPDT_TMSP: &last_updt_tmsp (&last_updt_tmsp_f); 
+0

Спасибо за ответы, ребята. –

+0

DCR и Carolina thank you ve много. также можно увидеть, что значение хранить в & last_updt_tmsp в журнале я взял CAROLINA объяснение, хотя я уверен, что DCR ваш тоже работает .. Я не должен изменить нижнюю часть ргос SQL NOPRINT; ВЫБОР выбрать максимум (,) входного сигнала (PROPERTY_VAL anydtdtm24.) = Формат datetime22.3 в: last_updt_tmsp из sybase_lib.prop_vals, где property_key = 'last.update.date'; quit; format & last_updt_tmsp. DATETIME18 .; данные _null_; вызов symput ('lst_cre_dttm', "'" || "& last_updt_tmsp." || "' dt"); run; % положить lst_cre_dttm = & lst_cre_dttm –

3

вы можете сделать это на этапе данных, выполните следующие действия:

data datetime; 
format new_date datetime24.3; 
a="2015-04-23 04:04:46.517"; 
new_date=input(a, anydtdtm24.); 
run; 

Использование ргос SQL вы можете попробовать:

proc sql; 
select max(input(a,anydtdtm24.)) format datetime24.3 into: max_date 
from table1; 
quit; 

%put &max_date; 

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

+0

DCR жаль, новичок в sas, How do Я прочитал столбец и сохранил его в этой переменной из таблицы, например select max (preoperty_val), в: new_DATE FROM TABLE PROPERTY –

0

DCR и Каролина спасибо очень много. Это сработало. Не могли бы вы рассказать разницу между max (input (PROPERTY_VAL, anydtdtm24.)) Format = datetime22.3 и max (input (a, anydtdtm24.)) Format datetime24.3.

DCR я буду держать вашу точку в виду, и пусть моя команда знают, и посмотреть, если мы можем перейти к last_updt_dt колонке

Также есть возможность увидеть, какое значение хранится в & last_updt_tmsp в журнале

Я принял объяснение каролины, хотя я уверен, что DCR тоже работает. Я не изменил нижнюю часть

proc sql noprint;

ВЫБОР

выбрать максимум (.,) Вход (PROPERTY_VAL anydtdtm24) Формат = datetime22.3 в: last_updt_tmsp из sybase_lib.prop_vals, где property_key = 'last.update.date';

quit;

формат & last_updt_tmsp. DATETIME18 .;

данные null;

call symput ('lst_cre_dttm', '' "||" & last_updt_tmsp."||" "дт");

бег;

% положить lst_cre_dttm = & lst_cre_dttm

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