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

时间:2016-11-08 07:20:33

标签: sas

  data dtetst;
        set date(keep= dtevar);
        dtevar=year(dtevar);
    run;

你好提取&从这个场景我已经实现的整个日期显示年份 - >以上代码适用于从日期中提取年份

但我还有另一个场景,只能从具有日期数据类型的库中找到那些列,即仅选择那些包含日期的列 - 例如> 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

任何帮助将不胜感激......

1 个答案:

答案 0 :(得分:2)

无法在SAS表中可靠地检测'date'数据类型,因为所有日期/日期时间都存储为简单数字(您只能在SAS中使用数字和字符数据类型)。 SAS日期只是自01JAN1960以来的天数。

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

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

此方法的缺点是您需要明确列出所使用的每种日期格式。此外,它依赖于应用的日期格式。它还假设我们正在讨论数字日期(无法检测存储为字符串的日期,有时会发生这种情况)。