Sas 如何使用dictionary.columns仅从库中选择具有日期的列

Sas 如何使用dictionary.columns仅从库中选择具有日期的列,sas,Sas,Hello am从整个日期提取和显示年份这个场景我已经实现->上面的代码可以很好地从日期提取年份 但是我有另一个场景,只定位具有日期数据类型的库中的那些列,即只选择其中包含日期的列,例如-->mdtc 2012-10-162014-06-152000-08-142007-12-28 我尝试了以下代码--> 我已经更新了我的代码,它选择具有特定格式的列 但是,我在date列中使用的year函数从它不执行预期操作的日期中提取年份,即从日期中提取年份,如下所示 PROC SQL noprint;

Hello am从整个日期提取和显示年份这个场景我已经实现->上面的代码可以很好地从日期提取年份

但是我有另一个场景,只定位具有日期数据类型的库中的那些列,即只选择其中包含日期的列,例如-->
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.');