Sas 如何使用dictionary.columns仅从库中选择具有日期的列
Hello am从整个日期提取和显示年份这个场景我已经实现->上面的代码可以很好地从日期提取年份 但是我有另一个场景,只定位具有日期数据类型的库中的那些列,即只选择其中包含日期的列,例如-->Sas 如何使用dictionary.columns仅从库中选择具有日期的列,sas,Sas,Hello am从整个日期提取和显示年份这个场景我已经实现->上面的代码可以很好地从日期提取年份 但是我有另一个场景,只定位具有日期数据类型的库中的那些列,即只选择其中包含日期的列,例如-->mdtc 2012-10-162014-06-152000-08-142007-12-28 我尝试了以下代码--> 我已经更新了我的代码,它选择具有特定格式的列 但是,我在date列中使用的year函数从它不执行预期操作的日期中提取年份,即从日期中提取年份,如下所示 PROC SQL noprint;
mdtc 2012-10-162014-06-152000-08-142007-12-28
我尝试了以下代码-->
我已经更新了我的代码,它选择具有特定格式的列
但是,我在date列中使用的year函数从它不执行预期操作的日期中提取年份,即从日期中提取年份,如下所示
PROC SQL noprint;
select distinct catx(".",libname,memname) into :list separated by " "
from dictionary.columns
where libname = upcase("dte") and format in('YYMMDD10.');
quit;
%put &list;
data tst3;
set &list;
date=year(mdtc);
run;
使用mdtc列上的year函数后的期望输出->
input data-> mdtc 2012-10-16, 2014-06-15, 2000-08-14 ,2007-12-28
任何帮助都将不胜感激……不可能可靠地检测SAS表中的“日期”数据类型,因为所有日期/日期时间都存储为简单的数字(SAS中只能有数字和字符数据类型)。SAS日期只是自1960年1月1日起的天数 但是,您可以检测应用了日期格式的列,这将合理地指示日期列,例如:
mdtc
2012
2014
2000
2007
这种方法的缺点是需要明确列出所使用的每个日期格式。此外,它还依赖于所应用的日期格式。它还假定我们讨论的是数字日期(无法检测存储为字符串的日期,这有时会发生)。不可能可靠地检测SAS表中的“日期”数据类型,因为所有日期/日期时间都存储为简单的数字(SAS中只能有数字和字符数据类型)。SAS日期只是自1960年1月1日起的天数 但是,您可以检测应用了日期格式的列,这将合理地指示日期列,例如:
mdtc
2012
2014
2000
2007
这种方法的缺点是需要明确列出所使用的每个日期格式。此外,它还依赖于所应用的日期格式。它还假定我们讨论的是数字日期(无法检测存储为字符串的日期,这有时会发生)。显然,您可以使用%通配符运算符,与
类似的,使搜索更容易,例如日期%、DD%、MM%、MON%、DT%。这假设OP不需要区分日期和时间datetimes@user7108488-这不是stackoverflow的工作方式!我回答了你的问题,所以我的回答应该被接受,你关于年份函数如何工作的新问题应该是一个新问题。但无论如何,原因是你使用的是应用格式的列,因此,您得到的日期与年份值相对应,例如自1960年1月1日起的2012天。我看到您再次更改了问题,因此您正在从mdtc列创建一个新列(日期)。date
是否有日期格式?如果是这样,请尝试设置日期8的格式
或将您的年份放入一个新变量,例如year=year(mdtc)
。如果上述方法不能解决问题,我打赌mdtc不是日期列。日志中是否有警告/错误?您得到了什么结果?显然,您可以使用%wildcard运算符,与类似于
的一起使用,以使搜索更容易,例如日期%、DD%、MM%、MON%、DT%。这假设OP不需要区分日期和时间datetimes@user7108488-这不是stackoverflow的工作方式!我回答了你的问题,所以我的回答应该被接受,你关于年份函数如何工作的新问题应该是一个新问题。但无论如何,原因是你使用的是应用格式的列,因此,您得到的日期与年份值相对应,例如自1960年1月1日起的2012天。我看到您再次更改了问题,因此您正在从mdtc列创建一个新列(日期)。date
是否有日期格式?如果是这样,请尝试设置日期8的格式
或将您的年份放入一个新变量,例如year=year(mdtc)
。如果上述方法不能解决问题,我打赌mdtc不是日期列。日志中是否有警告/错误?你得到了什么结果?这可能会帮助你开始。这可能会帮助你开始。
proc sql;
create table example as select *
from dictionary.columns
where libname='SASHELP'
and format in ('DATE9.','DATE7.');