将宏字符串转换为SAS日期

时间:2014-09-30 18:57:10

标签: date sas sas-macro

我有一个宏变量,它接受一个字符串(例如,'1-1-2014')来输入SQL查询。然后,我希望将该日期(不带单引号和格式不同)包含在我的报告中作为标题。如何将字符串“1-1-2014”(再次使用单引号)更改为2014年1月1日(worddate格式)。

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

当然,如果你知道一种更好/更有效的方式来做我正在做的事情,我会全神贯注。 (我的程序确实需要从SQL Server中提取数据,这就是我将宏变量格式化为单引号的原因。)

提前致谢。

(我搜索了现有的问题,找不到答案。如果我错过了什么,我道歉。)

1 个答案:

答案 0 :(得分: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.;