简单计算在宏观变量 - 任何方式使用MOD()函数?

问题描述 投票:0回答:3

有没有在定义宏变量使用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宏观变量都必须进行调整(年,月,并随访一年)。我的想法是推断只是一个输入,当年其他变动。

sas sas-macro
3个回答
2
投票

%eval%sysevalf被用来做数字运算,数据步骤之外。当使用功能,那么你需要%sysfunc

%LET year=2015;
%LET dec = %sysfunc(mod(&year.,100));

%put &=dec. and &=year.;

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;

0
投票

Reeza提供了一个很好的解决方案是完全正确的。我想用两个意见展开: 1.你可以找到像SAS%SUBSTR功能,但只macrovariables的操作;他们不更换%sysfunc(substr()),恰恰相反。 2.取一分钟,经过宏功能的列表,即那些以百分号开头是有用的:你会看到%,除了EVAL(),也有%SYSEVALF()。这份名单是here

© www.soinside.com 2019 - 2024. All rights reserved.