在SAS中,整体“宏观”概念的效用究竟是什么?我的意思是,与编写一个可以立即编译和运行的程序相比,写一些将被转换成程序的东西有什么意义呢?
我只对JAVA有经验,我认为JAVA不允许宏或元编程。因此,我想知道宏编程的意义是什么。不能仅仅封装一些业务逻辑,因为为此,我们使用函数/方法/子例程等。
发布于 2015-08-31 22:33:45
Java支持面向对象的编程范例.这允许您使用类、方法等来控制程序流,并实现与基本编程结构(如循环、if-然后逻辑等)的等效。
我并不100%确定SAS使用的编程范例分配了什么名称,我想我会把它称为顺序语言,因为代码一次只从上到下执行1条语句。
这意味着,在SAS语言中,除了宏之外,语言中没有任何部分允许您实现大多数语言认为理所当然的控制结构。它没有“过程”的概念(在一般的编程意义上)。SAS只需从上到下一次执行一条语句。
SAS中宏代码的使用(据我所见)是:
一些例子是:
proc freq
语句(而不是复制/粘贴100个单独的proc freq
语句,并在数据更改时维护它们)宏可以使我们的生活更轻松,但它是要付出代价的。宏代码很难读/写/调试,如果有非宏驱动的解决方案,通常应该避免。
发布于 2015-09-01 04:47:48
tl;dr应答
SAS或一般文本预处理器的实用功能是支持用生成的语言直接编写会很麻烦的构造。
详细信息
SAS宏是一个文本预处理程序。它的作用类似于C/C++中的CPP;几个Unix实用程序中的M4;HTML中基于Python和Ruby的模板语言;等等。文本预处理程序有两个主要目的:
典型的工作流缺少文本处理器的语言依赖于字符串操作来支持动态代码生成和执行。动态生成是在Java中特别困难。
几种SAS语言都有一个CALL EXECUTE
语句,但随着时间的推移,用户更喜欢使用SAS。用户依赖SAS宏在一定程度上是因为它是一个非常好的文本处理器。与大多数其他文本处理器不同,它支持流控制、范围、函数定义、算术、调用库函数、注释、交互输入,并且(当然,对于预处理程序)具有一个不显眼的语法。
因为它可能太好了,用户更喜欢面向对象的方法(即使用PROC DS2,或者最近使用的PROC GROOVY或PROC LUA)将导致更易于维护的代码的SAS宏。经常添加新的语言和访问SAS的新方法,但是由于SAS有这么多的用户已经编写了链接到旧文档的页面,所以有时PageRank可能会很慢。所以人们最终会过度使用宏。
在我的工作流中,我搜索最适合于手头任务的SAS语言或PROC,并以该语言执行大部分处理。然而,每一天都有一个用例,其中宏使事情比其他任何事情都简单。在这种情况下,我使用宏。如果你遵循生成语言第一,宏第二,我认为你会发现宏是一个宝贵的工具。
发布于 2015-08-31 20:17:32
SAS宏语言的主要目的是作为SAS代码生成器。SAS宏通常会生成SAS代码(可能是许多数据步骤和proc步骤,也可能是一条语句的一部分)。通常,生成SAS代码而不是键入它(或复制粘贴)是有用的(较少的类型)。人们确实使用宏作为函数和子程序。
也就是说,如果你是SAS的新手,我建议你现在不要学宏语言。在学习宏语言生成SAS代码之前,先学好SAS语言更有意义。许多经验丰富的SAS程序员完全避免使用宏语言。
https://stackoverflow.com/questions/32318511
复制相似问题