将sybase字符串列转换为SAS日期

时间:2015-04-24 15:37:35

标签: date 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

3 个答案:

答案 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