268: 宏里面使用in 語句和宏注釋

首先補充一點:

記得自己在看書的時候,好像是說%if %else 只能用在宏里面,但是昨天有人提醒現在的%if %else可以直接放在開放的代碼里,也就是你沒必要為了寫%if %else 而寫一個宏定義,比如下面這樣:

%macro test;
%if %then %do;
%else %do;
%mend;
%test
上面這樣是沒必要的,你可以直接寫%if %else,也就是兩種方法都可以。這個注意一下就好了.


image.png

一:
不知道大家在開始學習宏的時候,發(fā)現在宏里面不能直接用in選項,你得寫好幾個or選項,比如在data步中我們可以直接寫if a in (1:3) ,但是在宏里面你可能就得寫上3個,if a=1 or a=2 or a=3;這要是有幾十個選項,這不是要一大段or,顯然不是很現實。在宏里面,其實也可以用in選項的。

直接用宏選項:

%macro inin;
  
  %if aa in aa bb cc dd %then %do;
    %put "this is a test";
  %end;
  %else %put "error,no in options";
%mend;
%inin

image.png

但是我們加上這個系統(tǒng)選項之后 minoperator:控制宏處理器是否識別和計算IN(#)邏輯運算符。

options minoperator;
%
macro inin;
  
  %if aa in aa bb cc dd %then %do;
    %put this is a test;
  %end;
  %else %put "error,no in options";
%mend;
%inin
image.png

需要注意列表需要以空格分隔,不能以逗號分隔,但是在DATA步中兩種都可以。


image.png

但是我們自己可以指定分隔符,通過options mindelimiter=',';
指定分隔符后,如果你還是用空格的話,就會返回false,也就是跳到%else。
如果需要恢復空格,直接options mindelimiter='';就可以了。

同時在宏語言中#就代表in

%macro inin(var=,list=);
  
  %if %upcase(&var) # %upcase(&list) %then %do;
    %put &=var is in &list;
  %end;
  %else %put error,no in options;
%mend;
%inin(var=aa,list=aa bb cc dd);

image.png

二:
宏注釋:

  1. %*; Macro comments 推薦

%*這是一句注釋程序,放在宏里面安全;

  1. /* / style comments 推薦
    /
    這也是一句注釋語句,放在宏里面安全/
    3)
    ; asterisk-style comments 不推薦

這種注釋語句放在宏里面不安全,因為可能被識別成宏的一部分;這就讓我想起了以前寫的一篇文章,用這種注釋方法,然后宏一直報錯或者運行不出來。

image.png

SAS推薦用 /
/這種注釋方法,這種注釋會在任何其他類型的注釋之前從代碼中刪除。
宏注釋(%
;)和星號風格的注釋(* ;)是完整的語句,因此它們是標記化的。這意味著它們不能包含嵌入的分號或不匹配的引號。
需要注意的是,雖然上面這3種都是注釋的方法,但是它們在log里面展示的方法卻不一樣。在宏定義里面,只有星號風格的注釋(* ;)能顯示在log(調用mprint的時候)

在開放式代碼的時候,上面這3中注釋方法都能顯示在log里面。
下面把上面圖片中的注釋用Macro comments 和style comments 修改一下,這兩種注釋方法不會出現問題。

Macro comments:雖然在SASEG上看只有一段被注釋了,但是程序能夠正常運行的。

image.png

style comments:同時調用mprint;

image.png
image.png

加上星號注釋,只有這種注釋能顯示在log里面

image.png
image.png

上面這些就是關于宏注釋的一些知識點。

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 官網 中文版本 好的網站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,725評論 0 5
  • 原文地址:https://github.com/JuanitoFatas/slime-user-manual#24...
    四月不見閱讀 3,367評論 0 2
  • FreeMarker的模板文件并不比HTML頁面復雜多少,FreeMarker模板文件主要由如下4個部分組成: 1...
    年輕小伙程序員閱讀 3,165評論 0 5
  • 引子 gcc and g++分別是gnu的c & c++編譯器。gcc/g++在執(zhí)行編譯工作的時候,總共需要4步1...
    Alfie20閱讀 3,318評論 2 0
  • 目的: iOS APP在下一個版本會用swift開發(fā),在多人開發(fā)中,即使有官網的規(guī)范模板.但每個人的代碼風格和規(guī)...
    技術進階在路上閱讀 13,439評論 2 15

友情鏈接更多精彩內容