将CYYMMDD转换为SAS DB2中的日期通过SAS
我期待将格式为CYYMMDD(其中C对于20世纪为0或对于21世纪为1)的日期转换为标准SAS日期。该代码将放置在使用'proc sql'的SAS查询中,以便它可以将SAS日期与存储在DB2中的日期进行比较。将CYYMMDD转换为SAS DB2中的日期通过SAS
实施例:我试图输入数据= 1130101,输出=“1Jan2013'd
实例是:
(substr(t1.'EffectDate'n,4,2)|| '/' || substr(t1.'EffectDate'n,6,2) || '/' || cast(substr(t1.'EffectDate'n,1,3) AS INTEGER) + 1900)
失败到铸造()函数(显示为它不存在?)
也试过:
convert(varchar(10), convert(datetime, right(t1.'EffectDate'n, 6), 12), 101)
但是VARCHAR(10)不存在。
我的查询看起来是这样的:
proc sql;
create table CLAIMS as select
t1.CID,
t1.MID,
t1.DOS
OTHER_TABLE.ChangeDate AS EffectDate
FROM
SOURCE.REJECTED t1
INNER JOIN
EGTASK.OTHER_TABLE
ON
t1.DOS >= *Converted_Date*
[... goes on a couple more lines...]
其中* Converted_Date *正是我需要的。
(不过,我要澄清,这个特定的查询/加入并不一定需要SQL)
要将变量转换从它当前的编码格式转换成合适的SAS日期变量,你需要打开它转换成字符串,然后使用INPUT
函数读取结果。例如:
data _null_;
do EffectDate = 1130101,0130101;
cEffectDate = put(EffectDate,z7.);
if substr(cEffectDate,1,1) = '0'
then SASEffectDate = input('19' || substr(cEffectDate,2),yymmdd8.);
else SASEffectDate = input('20' || substr(cEffectDate,2),yymmdd8.);
put EffectDate=
/SASEffectDate=
/;
end;
format SASEffectDate yymmdd10.;
run;
这只是一个插图,有点冗长;它会创建一个名为SASEffectDate的新SAS变量来保留原始变量。一旦你把它作为一个SAS变量,你不需要做任何事情; SAS Access产品将知道如何创建对外部数据库的引用。
下面是使用PROC SQL
做类似的例子:
data have; /* Just a dummy data set for illustration */
do EffectDate = 1130101,0130101;
i+1;
output;
end;
run;
proc sql;
create table want as
select t2.*
, case when t2.EffectDate < 999999 /* starts with 0 */
then input('19' || substr(put(EffectDate,z7.),2),yymmdd8.)
else input('20' || substr(put(EffectDate,z7.),2),yymmdd8.)
end as SASEffectDate format=yymmdd10.
from have t2
;
quit;
有趣。整合到JOIN语句中(在ON标准中)究竟如何?此外,正在运行的代码不是SAS,它是通过从外部数据源提取的“proc sql”执行的SQL。 – 2013-02-18 01:04:15
我想我很困惑。 EffectDate是DB2表中的一列还是SAS数据集中的变量? – BellevueBob 2013-02-18 01:11:20
EffectDate是我DB2表中的一列。 – 2013-02-18 01:14:08
首先,没有必要包围单引号和'N'预选赛SAS变量名; 'EffectDate'就好了。它是什么类型的变量(字符或数字)? – BellevueBob 2013-02-18 00:39:49
这些报价是从玩游戏中剩余的 - 这只是在那个声明中。该变量是数字。它是格式为“Example”中列出的输入数据 – 2013-02-18 00:45:23
对不起,这是如此复杂,但两个LIBREFS“SOURCE”和“EGTASK”是指什么?它们是不同的DB2连接还是一个SAS库? – BellevueBob 2013-02-18 01:43:34