2014-09-30 55 views
1

我有一個宏變量需要一個字符串(例如'1-1-2014')來提供給SQL查詢。然後,我希望將該日期作爲報告中的標題加入,不帶單引號和格式不同。我怎麼去改變字符串'1-1-2014'(再次用單引號)到2014年1月1日(worddate格式)。將宏字符串轉換爲SAS日期

%let date = '1-1-2014'; 
title "Report as of [Conversion Code Here]"; 

當然,如果你知道一個更好/更有效的方法來做我正在做的事情,我全部都是耳朵。 (我的程序確實需要將數據從SQL Server中提取出來,這就是爲什麼我使用單引號括起來的宏變量。)

在此先感謝。

(我尋遍存在的問題,無法找到一個答案。我道歉,如果我錯過了什麼。)

回答

2

進行格式轉換,你需要的put()的數字字符轉換和字符input()功能數字。要在宏調用中使用SAS數據階躍函數,需要使用%sysfunc()宏函數。在%sysfunc()中取代put()/input()putn()/putc()/inputn()/inputc()根據here%sysfunc()也允許爲其輸出指定格式作爲第二個參數。

%let date = '1-1-2014'; 
%let longDate = %sysfunc(inputn(%sysfunc(compress(&date., "'")), ddmmyy10.), WEEKDATE32.); 
%put &longDate.; 

compress()功能只是從原來的宏變量剝離的報價,所以該日期可使用ddmmyy10.了信息讀取。

編輯:逐步細分。

%let date = '1-1-2014'; 
%put &date.; 
/* Strip away the single quotes */ 
%let deQuotedDate = %sysfunc(compress(&date., "'")); 
%put &deQuotedDate.; 
/* Read in the date using ddmmyy. informat and convert to SAS date */ 
%let sasDate = %sysfunc(inputn(&deQuotedDate., ddmmyy10.)); 
%put &sasDate.; 
/* Convert the SAS date to the required format */ 
%let longDate = %sysfunc(putn(&sasDate., weekdate32.)); 
%put &longDate.; 
+1

謝謝!這工作完美。我將指出,您需要將%let sasDate行更改爲ddmmyy10。如果您運行您編寫的代碼,則最終的日期爲2020年1月1日,因爲它會讀入年份(2014年)的前兩個數字,而不是全部四個數字。無論哪種方式,再次感謝! – Ian 2014-09-30 20:32:22

+0

好的。我應該在發佈之前檢查它。現在編輯,謝謝。 – SRSwift 2014-09-30 20:45:45