我有一个宏变量,它接受一个字符串(例如,'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中提取数据,这就是我将宏变量格式化为单引号的原因。)
提前致谢。
(我搜索了现有的问题,找不到答案。如果我错过了什么,我道歉。)
答案 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.;