评估SAS中的非算术字符串表达式
Evaluating non arithmetic string expression in SAS
我在文本类型的 SAS DIS 作业中有一个参数 start_date
,我设置了一个默认值。如果默认值类似于 01JAN2015
(不带引号),则引用
之类的变量
input("&start_date",date9.)
工作正常。但是,如果我给它默认值 put(today(),date9.)
那么参数保存的值就是指令字符串,而不是指令应该求值的字符串。因此对参数的引用不符合预期。
我试过使用 %EVAL
和 EVALUATE
,但所有这些函数似乎都是为计算 arithmetic 表示为字符串的表达式而设计的。有什么方法可以评估这个表达式,或者正确地编码它开始吗?
(仅供参考,我使用文本参数而不是日期参数的原因是当我尝试循环参数化作业时尝试使用日期参数对我不起作用,这是我的意图)。
非常感谢。
您需要使用%sysfunc
来使用宏处理器执行数据步函数。这也消除了对 put()
函数的需要,因为 %sysfunc 允许指定返回值的格式:
%let start_date=%sysfunc(today(),date9.);
%put &start_date;
或者您可以使用数据步骤来计算值:
data _null_;
call symput('start_date',put(&control_start_date,date9.));
run;
%put &start_date;
我在文本类型的 SAS DIS 作业中有一个参数 start_date
,我设置了一个默认值。如果默认值类似于 01JAN2015
(不带引号),则引用
input("&start_date",date9.)
工作正常。但是,如果我给它默认值 put(today(),date9.)
那么参数保存的值就是指令字符串,而不是指令应该求值的字符串。因此对参数的引用不符合预期。
我试过使用 %EVAL
和 EVALUATE
,但所有这些函数似乎都是为计算 arithmetic 表示为字符串的表达式而设计的。有什么方法可以评估这个表达式,或者正确地编码它开始吗?
(仅供参考,我使用文本参数而不是日期参数的原因是当我尝试循环参数化作业时尝试使用日期参数对我不起作用,这是我的意图)。
非常感谢。
您需要使用%sysfunc
来使用宏处理器执行数据步函数。这也消除了对 put()
函数的需要,因为 %sysfunc 允许指定返回值的格式:
%let start_date=%sysfunc(today(),date9.);
%put &start_date;
或者您可以使用数据步骤来计算值:
data _null_;
call symput('start_date',put(&control_start_date,date9.));
run;
%put &start_date;