2016-11-08 89 views
0
data dtetst; 
     set date(keep= dtevar); 
     dtevar=year(dtevar); 
    run; 

你好从库中有唯一的日期一列正在提取&显示今年从整个日期这种情况下,我有achieved->上面的代码工作正常,从日期如何选择使用dictionary.columns

每年提取

但我有另一个场景,从库中有日期数据类型即他们只选择那些含有日期列例如定位只有那些列 - >mdtc 2012-10-16, 2014-06-15, 2000-08-14 ,2007-12-28

我想下面的代码 - >

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; 

我已经更新了我的代码,它选择了具有特定格式的列 ,但是我使用日期列中的年份函数从日期中提取年份,而不执行预期操作,从日期中提取年份,如下所示。

input data-> mdtc 2012-10-16, 2014-06-15, 2000-08-14 ,2007-12-28 
使用的列mdtc->

mdtc 
2012 
2014 
2000 
2007 

任何帮助,将不胜感激年功能之后

所需的输出...

+0

这可能会帮助您开始。 https://communities.sas.com/t5/Base-SAS-Programming/Determine-if-a-variable-contains-a-SAS-date-value/mp/154851/highlight/true#M30347 – Reeza

回答

2

这是不可能可靠地检测在一个“日期”数据类型SAS表格,因为所有日期/日期时间都以简单的数字形式存储(SAS中只能包含数字和字符数据类型)。 SAS日期只是自01年1月1日以来的天数。

但是 - 你可以检测到应用了日期格式的那些列,这将合理地显示日期列,例如如下:

proc sql; 
create table example as select * 
    from dictionary.columns 
    where libname='SASHELP' 
    and format in ('DATE9.','DATE7.'); 

这种方法的缺点是,你需要明确地列出每一个日期格式使用。另外,它依赖于应用的日期格式。它也假定我们正在谈论数字日期(无法检测存储为字符串的日期,有时会发生)。

+1

你很明显可以制作使用%通配符运算符和'like'一起使搜索更容易,例如DATE%,DD%,MM%,MON%,DT%。这假定OP不需要区分日期和日期时间 – Longfish

+0

@ user7108488 - 这不是stackoverflow应该如何工作!我回答了你的问题,所以我的答案应该被接受,而你关于年度职能如何工作的新问题应该是一个新问题。 –

+0

但无论如何,原因在于您重新使用了应用格式的列,因此您会得到与年度价值相对应的日期 - 例如自01年1月1日以来的2012天。 –