首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SAS语言提供的宏编程的好处是什么?

SAS语言提供的宏编程的好处是什么?
EN

Stack Overflow用户
提问于 2015-08-31 19:25:48
回答 4查看 770关注 0票数 1

在SAS中,整体“宏观”概念的效用究竟是什么?我的意思是,与编写一个可以立即编译和运行的程序相比,写一些将被转换成程序的东西有什么意义呢?

我只对JAVA有经验,我认为JAVA不允许宏或元编程。因此,我想知道宏编程的意义是什么。不能仅仅封装一些业务逻辑,因为为此,我们使用函数/方法/子例程等。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-08-31 22:33:45

Java支持面向对象的编程范例.这允许您使用类、方法等来控制程序流,并实现与基本编程结构(如循环、if-然后逻辑等)的等效。

我并不100%确定SAS使用的编程范例分配了什么名称,我想我会把它称为顺序语言,因为代码一次只从上到下执行1条语句。

这意味着,在SAS语言中,除了宏之外,语言中没有任何部分允许您实现大多数语言认为理所当然的控制结构。它没有“过程”的概念(在一般的编程意义上)。SAS只需从上到下一次执行一条语句。

SAS中宏代码的使用(据我所见)是:

  • 使程序由数据驱动
  • 包装过程在控制结构中(即。有条件地执行某些代码段,执行循环中的代码段等)
  • 生成未知执行前的所需代码

一些例子是:

  • 只在某个表已经存在的情况下运行数据步骤
  • 在100个不同的表上运行一个proc freq语句(而不是复制/粘贴100个单独的proc freq语句,并在数据更改时维护它们)
  • 生成一个不碰巧知道执行前时间的数字或单词,因为这些值可以简单地替换到代码中。

宏可以使我们的生活更轻松,但它是要付出代价的。宏代码很难读/写/调试,如果有非宏驱动的解决方案,通常应该避免。

票数 1
EN

Stack Overflow用户

发布于 2015-09-01 04:47:48

tl;dr应答

SAS或一般文本预处理器的实用功能是支持用生成的语言直接编写会很麻烦的构造。

详细信息

SAS宏是一个文本预处理程序。它的作用类似于C/C++中的CPP;几个Unix实用程序中的M4;HTML中基于Python和Ruby的模板语言;等等。文本预处理程序有两个主要目的:

  1. 通过提供数据驱动的模板机制来最小化冗余代码
  2. 超越生成语言语法所施加的限制。

典型的工作流缺少文本处理器的语言依赖于字符串操作来支持动态代码生成和执行。动态生成是在Java中特别困难

几种SAS语言都有一个CALL EXECUTE语句,但随着时间的推移,用户更喜欢使用SAS。用户依赖SAS宏在一定程度上是因为它是一个非常好的文本处理器。与大多数其他文本处理器不同,它支持流控制、范围、函数定义、算术、调用库函数、注释、交互输入,并且(当然,对于预处理程序)具有一个不显眼的语法。

因为它可能太好了,用户更喜欢面向对象的方法(即使用PROC DS2,或者最近使用的PROC GROOVYPROC LUA)将导致更易于维护的代码的SAS宏。经常添加新的语言和访问SAS的新方法,但是由于SAS有这么多的用户已经编写了链接到旧文档的页面,所以有时PageRank可能会很慢。所以人们最终会过度使用宏。

在我的工作流中,我搜索最适合于手头任务的SAS语言或PROC,并以该语言执行大部分处理。然而,每一天都有一个用例,其中宏使事情比其他任何事情都简单。在这种情况下,我使用宏。如果你遵循生成语言第一,宏第二,我认为你会发现宏是一个宝贵的工具。

票数 3
EN

Stack Overflow用户

发布于 2015-08-31 20:17:32

SAS宏语言的主要目的是作为SAS代码生成器。SAS宏通常会生成SAS代码(可能是许多数据步骤和proc步骤,也可能是一条语句的一部分)。通常,生成SAS代码而不是键入它(或复制粘贴)是有用的(较少的类型)。人们确实使用宏作为函数和子程序。

也就是说,如果你是SAS的新手,我建议你现在不要学宏语言。在学习宏语言生成SAS代码之前,先学好SAS语言更有意义。许多经验丰富的SAS程序员完全避免使用宏语言。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32318511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档