前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SAS-Macro编写调试技巧及相关(Option)

SAS-Macro编写调试技巧及相关(Option)

作者头像
Setup
发布2019-10-21 17:16:55
3.5K0
发布2019-10-21 17:16:55
举报
今天是平安夜,是吧,恩,应该是的,票圈已经被苹果和‘绿色’的圣诞帽霸屏了,小编预祝大家今夜过后“平安喜乐,得偿所愿”。恩,小编最近在研究logistics回归,小编这智商,研究了几天,感觉还没研究入门,所有就先不share那个了,过几天研究入门了在来说那个,今天小编要说的主题是编写Macro时候的调试技巧。

在说正文前,小编还是要插播一下小编今年的一次面试经历。今年,小编去5家公司面试了,恩,从5月份开始,差不多一个月去一家公司面试,前俩家被拒,后三家都拿到offer了。

面了这么多次试,大多数面试都只是谈一下工作“心得”,面试官真正的”SAS技术”的面试也就1家,

把我虐的觉得以前写SAS都写到狗身上了,为啥小编这么觉得呢,因为面试官问了关于Macro调试的几个问题。小编都表述不出来了。虽然最后面试过了也拿到了offer,但是小编还是深刻的认识到自己Macro技能的匮乏,不会那几个option小编都不太好意思说自己会写Macro。

本文由“壹伴编辑器”提供技术支持

1

%goto语句

%goto语句的使用:需要写封闭的Macro代码里面,可以实现语句的跳转

1.且看下方代码,预测一下Log会显示什么?

%macro test;

%put NOTE:开始执行!;

%let flag=1;

%if &flag=1%then%goto exe;

%put NOTE:执行到这儿了~???;

%exe:

%put NOTE:执行结束!;

%mend;

%test

Log:

有没有疑问为什么没有执行Log第53行代码(哦,对了,解释一下为啥我 %put 的时候喜欢加 NOTE:这样的字样,因为加上的的话%put的内容就是绿色的字体了,如果没有NOTE:则是黑色的自己,纯属个人喜好,因为有颜色的字体比较容易引起视觉的关注,也推荐大家写Macro的时候要把一句话%put的Log上的时候加上Note:)。

还是说重点,为啥没有执行53行代码呢,因为有%goto语句,如码所示,在%if语句条件为真的时候则执行了%goto exe(这儿的%if 和条件可以不写, 可以将第50行代码,直接换成 %goto exe;);这个时候SAS会直接跳转到 %exe: 后面,执行后面的代码了。如果我们用%goto语句,会非常方便我们分段调试SAS Macro。它的使用不仅局限在调试的时候使用,在marco中也可以用,但满足一定条件的时候我想直接退出Macro的执行啊,等等。

2

SAS MACRO OPTIONS

调试的option小编还是先用一段代码和一张截图来说明问题。

code:

option mprint symbolgen mlogic mfile;

option notes;

%macro loop(loop);

%do i=1%to &loop. ;

%if &i.=1%then%do;

%put NOTE:圣诞快乐~ (执行第&i.此循环);

%end;

%if &i.=2%then%do;

%put NOTE:圣诞快乐~ (执行第&i.此循环);

%end;

%if &i.=3%then%do;

%put NOTE:圣诞快乐~ (执行第&i.此循环);

%end;

%end;

%mend;

%loop(3);

log:

看日志,有没有发现和大家平时的log不一样,这个日志可以看到很多信息,Macro是怎么运行的,每一步宏变量的值,每一个判断语句是否为成立,等等信息。这些全是通过Option选项实现的。

option mprint symbolgen mlogic mfile;是这四个option,此处主要是(symbolgen mlogic )这俩个Option控制的,如日志,每一句log前独有说明。

这些主要是在调试的时候使用,当Macro调试完成后,我们得关掉这些Option,为啥要关掉了,因为option打开了会严重影响Macro的运行速度。如何关闭Option呢,很简单在每个前面加no就行了。好吧,调试小编暂时用到的也就这些,可能不算很多,也不全,如果各位看客有要补充的可以留言(万谢!),分享使人快乐,千万不要藏着掖着!

本文由“壹伴编辑器”提供技术支持

另外补充一个SAS执行好的Macro文件如何调用:(Macro执行的后的文件是一个黄黄的小文件(sasmacr.sas7bcat))

%let MAC=E:\macro\other;

libname MAC "&MacPath";

Options MAuto Source MStored SASMStore=MAC;

今天的内容有点少,咦,真的有点少,好吧为了凑字数,小编说点别的,SUM的函数的另类用法。

1

SUM函数常规写法

SUM不就是求和么?是,SUM是求和。先来看常

结果:

在data步中的SUM函数的使用,求多个变量的和针对行(见y变量的生成)。在proc sql中的应用,可以求行之和(见yy变量的生成),也求列的和(见yyy变量的生成)。好吧,这都是常规的用法。

2

SUM非常规写法

SAS中的”布尔类型”:真(1),假(0)

预测一下此时a数据集中Z的值?

在sum函数中写条件,如果满足条件则返回1,不满足则返回0,在实际编程中有什么用途呢,一定用的上,而且针对一些特殊问题,解决起来是非常便捷的。

小编就进举一例:比如,我有20个条件,只要满足其中任意5个,则筛选出来,这个时候就可以用 sum(20个条件)>5 去实现.... 好了,很多函数都有类似这样的功能,大家可以去尝试,我就不一一列举了,其实小编也没有尝试其他函数,因为小编觉得SUM函数现在已经够我解决很多问题了。函数的话,小编以后会继续分享的,因为小编最近在研究自定义函数,等小编学会了,一并给大家分享

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-12-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SAS程序分享号号号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档