宏变量中的简单计算-是否可以使用MOD(,)函数?

时间:2019-02-04 16:28:40

标签: sas sas-macro

在定义宏变量时是否有使用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个宏变量都必须进行调整(年份,十月和后续年份)。我的想法是从一年的一次输入中推断出其他变化。

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