在定义宏变量时是否有使用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个宏变量都必须进行调整(年份,十月和后续年份)。我的想法是从一年的一次输入中推断出其他变化。
答案 0 :(得分:2)
%eval
和%sysevalf
用于在数据步骤之外对数字进行计算。使用函数时,您需要%sysfunc
%LET year=2015;
%LET dec = %sysfunc(mod(&year.,100));
%put &=dec. and &=year.;
答案 1 :(得分:1)
您需要使用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;
答案 2 :(得分:0)
Reeza提供了一个很好的解决方案,它是绝对正确的。我会用两个注释来扩展它:
1.您可以在SAS中找到类似%SUBSTR的函数,但是这些函数只能在宏变量上运行;相反,它们不能代替driver.findElement(By.xpath("//*[@role='button' and text()='Compose']")).click();
。
2.花一点时间浏览宏功能列表,即以百分号开头的宏功能,这很有用:您将看到,除了%EVAL()外,还有%SYSEVALF()。列表为MDN。