有没有在定义宏变量使用MOD(,)
功能一个聪明的办法?
例如,考虑这样的:
%LET year=2015;
%LET dec = %EVAL(mod(&year.,100));
凡dec
将只包含年份的最后两个数字。这将无法正常工作(与SYSEVAL
相同),因为%EVAL
功能无法正常访问MOD
功能。
我不希望包括DATA STEP
,但结果其实应该是这样的:
data _null_;
input_year=2015;
input_dec =mod(input_year,100);
%LET year=input_year;
%LET dec = input_dec;
put &dec. 'and ' &year.;
run;
这里的问题是,宏变量不能被称为DATA STEP
外(也许我做错了什么?即便是global option
不会做的伎俩)。
一些背景:
在现有的autoexec file
用户必须改变一些输入,根据年份不同,都在一起3宏观变量都必须进行调整(年,月,并随访一年)。我的想法是推断只是一个输入,当年其他变动。
%eval
和%sysevalf
被用来做数字运算,数据步骤之外。当使用功能,那么你需要%sysfunc
%LET year=2015;
%LET dec = %sysfunc(mod(&year.,100));
%put &=dec. and &=year.;
您需要使用SYSFUNC()宏语法使用的功能。 SUBSTR也能发挥作用。
%let year=2015;
%let index = %sysfunc(substr(&year, 3, 2));
%put &year;
%put &index.;
%EVAL()工程数学计算,如:
%let next_year = %eval(&year + 1);
%let next_year_index = %eval(&index + 1);
%put Next Year: &next_year.;
%put Next Year Index: &next_year_index;
Reeza提供了一个很好的解决方案是完全正确的。我想用两个意见展开:
1.你可以找到像SAS%SUBSTR功能,但只macrovariables的操作;他们不更换%sysfunc(substr())
,恰恰相反。
2.取一分钟,经过宏功能的列表,即那些以百分号开头是有用的:你会看到%,除了EVAL(),也有%SYSEVALF()。这份名单是here。