将 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
我正在尝试将 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