繁体   English   中英

如何解释这个SAS宏?

[英]How to explan this SAS macro?

我是一名新的SAS学习者。 这是SAS声明。

%if %sysfunc(prxmatch(/^(E0349646)$/i, &SYSUSERID.)) ne 0 %then %do;

我只知道“E0348535”是一个用户ID,但无法理解这整个声明。 请解释这个SAS宏。 非常感谢!

prxmatch是SAS中的PERL正则表达式函数。 此语句检查用户标识名称是否包含E0349646 prxmatch返回匹配发生的第一个位置。 如果找不到匹配项,则为0。

%sysfunc()是一个宏函数,允许您在宏中使用SAS函数。 由于prxmatch是在宏中使用的SAS函数,因此必须用%sysfunc()括起来。

最后, ne是另一种说不not equals 总而言之,这就是这句话用简单的英语做的:

If the user ID contains 'E0349646', then do some stuff.

首先是术语。 SAS宏处理器是一种可以处理文本并将结果传递到实际SAS系统以进行解释的工具。 那一行代码是使用宏处理器语句,但它不是一个完整的宏定义。 实际上从SAS 9.4开始(我想也许是维护版本9.4m4?)你可以在正常的SAS程序中使用%if/%then/%do语句类型,而%if/%then/%do不必定义实际的宏。

所以你拥有的是一个宏%if语句。 一般形式是:

%if condition %then statement ;

由于%then部分之后的语句是%do宏语句,那么你的程序将需要一个%end; 用于标记条件为真时执行的块结束的语句。

让我们看看你在%if语句中测试的条件。

%sysfunc(prxmatch(/^(E0349646)$/i, &SYSUSERID.)) ne 0 

因此,使用宏函数%sysfunc()可以在宏代码中调用SAS函数prxmatch() 这是实现Perl正则表达式的一组函数的一部分。 您还引用了一个名为SYSUSERID的宏变量。 该特定宏变量是SAS自动创建的变量,用于包含运行SAS程序的用户的用户标识。 prxmatch()函数调用中使用的正则表达式是测试值是否等于E0349646 ,忽略大小写。 结果将是被搜索字符串中第一个找到的位置的位置。 如果没有找到,那么它将返回0.(SAS,就像人类一样,使用从1开始而不是从零开始的索引。)。

请注意,在正则表达式中包含^$意味着它需要匹配完整的字符串。 因此,您正在测试E0349646是否正在运行该程序。

在不需要正则表达式或需要使用非宏函数调用的情况下直接测试它会容易得多。

%if %upcase(&sysuserid)=E0349646 %then %do;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM