我试图将以下格式的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
答案 0 :(得分:3)
您可以在数据步骤中执行此操作,请尝试以下操作:
data datetime;
format new_date datetime24.3;
a="2015-04-23 04:04:46.517";
new_date=input(a, anydtdtm24.);
run;
使用proc sql,您可以尝试:
proc sql;
select max(input(a,anydtdtm24.)) format datetime24.3 into: max_date
from table1;
quit;
%put &max_date;
要记住的一点是,与数字变量的最大值相比,字符变量的最大值不会给出一致的结果。你想要后者。
答案 1 :(得分: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);
答案 2 :(得分:0)
DCR和Carolina非常感谢你。有效。能告诉我max(输入(PROPERTY_VAL,anydtdtm24。))format = datetime22.3和max(输入(a,anydtdtm24。))格式datetime24.3之间的区别。
DCR我会记住你的观点,让我的团队知道,看看我们是否可以切换到last_updt_dt列
还可以查看日志中& last_updt_tmsp中存储的值
虽然我确信DCR你的工作也是卡罗莱纳的解释但我没有改变底部
proc sql noprint;
选择
选择max(输入(PROPERTY_VAL,anydtdtm24。))format = datetime22.3 into:last_updt_tmsp 来自sybase_lib.prop_vals,其中property_key =' last.update.date';
退出;
格式& up_updt_tmsp。 DATETIME18;
数据 null ;
致电同情(' lst_cre_dttm',"'" ||"& last_updt_tmsp。" ||"&#39峰; dt&#34);
运行;
%put lst_cre_dttm =& lst_cre_dttm