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返回一个缺失值。
我想知道我的方法出了什么问题以及正确的方法是什么。
答案 0 :(得分:2)
宏处理器只是将宏引用替换为解析的文本,然后将生成的文本解释为文本。所以当你尝试的时候。
input(&fyq0,yymmdd6.)
与您的代码相同
input(000930,yymmdd6.)
即使运行SAS,也必须首先使用BEST12将数字930转换为字符串。格式,将导致像
这样的字符串' 930'
,而输入功能只能读取6个前导空格。
宏处理器不处理单引号内的文本。由于字母和符号不是有效数字,因此INPUT函数无法将五个字符串'&fyq0'转换为有效日期。
您可以使用双引号字符使SAS解析宏变量引用。
input("&fyq0",yymmdd6.)
现在,宏变量引用将解决,并且生成的代码将是:
input("000930",yymmdd6.)