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

Convert sybase string column into SAS Date

我正在尝试将 sybase 中以下格式的字符串列转换为 SAS 日期。

sybase table 有这样的字符串值

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 并尝试编写一些代码,但它不起作用。

所有这些代码都在作业开始前的预编码中。

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

您可以在数据步骤中执行此操作,请尝试以下操作:

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;

要记住的一点是,与数字变量的最大值相比,字符变量的最大值不会给您一致的结果。你想要后者。

整理答案并评论答案

Data HAVE;
length PROPERTY_VAL ;
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);

DCR 和 Carolina 非常感谢你们。有效。你能告诉我 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;

SELECT

select max(输入(PROPERTY_VAL, anydtdtm24.)) format=datetime22.3 into :last_updt_tmsp 来自 sybase_lib.prop_vals 其中 property_key='last.update.date';

退出;

格式化&last_updt_tmsp。 DATETIME18.;

数据;

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

运行;

%put lst_cre_dttm=&lst_cre_dttm