输入函数可以将宏变量用作字符参数吗?

时间:2019-06-08 21:25:21

标签: sas

SAS表示:错误:INPUT函数需要一个字符参数。 当我运行以下代码时:

%let fyq0 = 000930 ;
%put &fyq0 ;
proc sql ;
create table check as
select *, input(&fyq0,yymmdd6.) as fyq0
from q ;
quit ;

我试图使用'&fyq0'代替&fyq0作为-input-函数的第一个参数,如下所示:

%let fyq0 = 000930 ;
%put &fyq0 ;
proc sql ;
create table check as
select *, input('&fyq0',yymmdd6.) as fyq0
from q ;
quit ;

然后SAS表示:注:函数INPUT的参数无效。可能会生成缺失值。实际上,变量fyq0返回一个缺失值。

我想知道我的方法出了什么问题以及正确的方法是什么。

1 个答案:

答案 0 :(得分:2)

宏处理器只是将宏引用替换为解析的文本,然后将生成的文本解释为文本。所以当你尝试的时候。

input(&fyq0,yymmdd6.) 

与您的代码相同

input(000930,yymmdd6.) 

即使运行SAS,也必须首先使用BEST12将数字930转换为字符串。格式,将导致像

这样的字符串
'         930' 

,而输入功能只能读取6个前导空格。

宏处理器不处理单引号内的文本。由于字母和符号不是有效数字,因此INPUT函数无法将五个字符串'&fyq0'转换为有效日期。

您可以使用双引号字符使SAS解析宏变量引用。

input("&fyq0",yymmdd6.) 

现在,宏变量引用将解决,并且生成的代码将是:

input("000930",yymmdd6.)