美文网首页
268: 宏里面使用in 语句和宏注释

268: 宏里面使用in 语句和宏注释

作者: SASPRO的打工人生活 | 来源:发表于2023-09-08 16:49 被阅读0次

首先补充一点:

记得自己在看书的时候,好像是说%if %else 只能用在宏里面,但是昨天有人提醒现在的%if %else可以直接放在开放的代码里,也就是你没必要为了写%if %else 而写一个宏定义,比如下面这样:

%macro test;
%if %then %do;
%else %do;
%mend;
%test
上面这样是没必要的,你可以直接写%if %else,也就是两种方法都可以。这个注意一下就好了.


image.png

一:
不知道大家在开始学习宏的时候,发现在宏里面不能直接用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

但是我们加上这个系统选项之后 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

上面这些就是关于宏注释的一些知识点。

相关文章

  • #define、#undef、Preprocessor Macr

    #define 简单的宏定义。 没有设置值的宏定义不能在if条件语句和#if预编译语句中使用,但是可以在#ifde...

  • 宏、参数宏、宏嵌套

    简单宏容易理解,如: 带参数的宏以及宏嵌套: 使用BOOTCMD时就像函数一样使用,方便。如上语句BOOTCMD(...

  • ## 和 @# 在宏里面的使用

    如上面的这个宏,##是连接的作用, 即当使用上面的宏会把weak与输入的type值连接起来如下图: 是用来连接上面...

  • 单片机学习笔记10-C51中的简单宏定义

    宏定义语句属于C51语言的预处理指令,使用宏可以使变量书写简化,增加程序的可读性、可维护性和可移植性。宏定义分为简...

  • iOS之宏定义

    iOS开发小技巧之--WeakSelf宏的进化 宏定义不是C语句,也无须使用分号结束 宏定义并不是变量,它甚至不是...

  • 宏函数

    使用宏函数优势 1、简化程序的编写 2、宏是由编译器解析和替换的,宏里面可以不用写类型 声明方式: #define...

  • 2018-05-31

    预处理命令: 宏 不带参数的的宏定义 不是c语句 PI宏展开宏明 可以层层置换 简单的字符串替换 带参数的宏 不是...

  • Flask系列教程(10)——宏和import语句

    宏和import语句 宏: 模板中的宏跟python中的函数类似,可以传递参数,但是不能有返回值,可以将一些经常用...

  • 2.6 jinja2宏和import语句

    宏和import语句 宏: 模板中的宏跟python中的函数类似,可以传递参数,但是不能有返回值,可以将一些经常用...

  • 使用NSLog打印 控制台没有输出

    原因:一直使用自定义的宏打印数据,系统的NSLog禁用了,调试BUG需要打印时间把自定义的宏输出注释了,使用系统N...

网友评论

    本文标题:268: 宏里面使用in 语句和宏注释

    本文链接:https://www.haomeiwen.com/subject/eljhmdtx.html