簡體   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