Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sas 宏变量中的简单计算-有没有使用MOD(,)函数的方法?_Sas_Sas Macro - Fatal编程技术网

Sas 宏变量中的简单计算-有没有使用MOD(,)函数的方法?

Sas 宏变量中的简单计算-有没有使用MOD(,)函数的方法?,sas,sas-macro,Sas,Sas Macro,在定义宏变量时,是否有一种巧妙的方法来使用MOD(,)函数 例如,考虑这个: %LET year=2015; %LET dec = %EVAL(mod(&year.,100)); 其中,dec只包含年份的最后两位数字。由于%EVAL功能无法正确访问MOD功能,因此这将不起作用(与SYSEVAL相同) 我不想包含数据步骤,但结果实际上应该是这样的: data _null_; input_year=2015; input_dec =mod(input_year,100); %LET yea

在定义宏变量时,是否有一种巧妙的方法来使用
MOD(,)
函数

例如,考虑这个:

%LET year=2015;
%LET dec = %EVAL(mod(&year.,100));
其中,
dec
只包含年份的最后两位数字。由于
%EVAL
功能无法正确访问
MOD
功能,因此这将不起作用(与
SYSEVAL
相同)

我不想包含
数据步骤
,但结果实际上应该是这样的:

data _null_;
input_year=2015;
input_dec =mod(input_year,100);
%LET year=input_year;
%LET dec = input_dec;
put &dec. 'and ' &year.;
run;
这里的问题是不能在
数据步骤
之外调用宏变量(可能我做错了什么?即使是
全局选项
也不起作用)

某些上下文:


在现有的
autoexec文件中
用户必须更改一些输入,这取决于年份,所有3个宏变量都必须调整(年份、十二月和后续年份)。我的想法是从一个输入推断出其他的变化,这一年

%eval
%sysevalf
用于在数据步骤之外对数字进行计算。使用函数时,需要
%sysfunc

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

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

%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;
需要使用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这样的函数,但这些函数只对宏变量进行操作;相反,它们不会取代
%sysfunc(substr())


2.花一分钟浏览宏函数列表是很有用的,即以百分号开头的宏函数:您将看到除了%EVAL(),还有%SYSEVALF()。清单如下。

Reeza提供了一个非常好的解决方案,它绝对正确。我将其扩展为两条注释:
1.您可以在SAS中找到像%SUBSTR这样的函数,但这些函数只对宏变量进行操作;相反,它们不会取代
%sysfunc(substr())


2.花一分钟浏览宏函数列表是很有用的,即以百分号开头的宏函数:您将看到除了%EVAL(),还有%SYSEVALF()。列表是。

太好了,可以了!不确定为什么我没有从一开始就发现
%sysfunc
函数。谢谢太好了,行了!不确定为什么我没有从一开始就发现
%sysfunc
函数。谢谢