2016-11-08 26 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天。 –