【水煮 SAS】Macro Variables 宏变量

SAS Macro 是 SAS 特有的语言,来施行循环和重复性数据处理。其语言与 R/ Python 的相应部分都不同。R/Python 一般是通过  for loop/if loop 或者自定义函数来进行宏处理,而SAS 则是自己开发了一套 macro language,通过 macro processor 来处理。实际上,这些 macro 语言统称为 symbol languages, 存在于许多计算机语言里。

SAS macro is a special SAS program, prepared and processed by SAS macro facilities (macro processor and macro language). It can generate text contents for uses in standard SAS programming. Please note:

In macro, everything is text!

Macro 是 学习SAS 最难的一部分, 刚开始一定是晕头转向,莫名其妙。比如 local/global macro variables, 这些就令很多人困惑。很多教材里面是这样说的:

In summary, a global macro variable is stored in the global macro symbol table, it can be used anywhere in a SAS program. On the contrary, a local macro variable is stored in a specific local symbol table. A local macro variable only exists during the execution of the macro and can only be used inside its own macro.

这是嘛意思?拜托,能不能说人话?!

我说,如果你年龄足够老,你应该知道,几十年前,中国有个东西叫做粮票。

全国粮票是全国通行,除此之外,每个省,甚至某个市都发行自己的粮票,比如河南省粮票,江苏省粮票,南京市粮票,郑州市粮票,等等等等。没有办法,计划经济啊。

      

地方粮票只能在地方上使用,出了省市,就无效!

Global, local macro variables 不正如同这些粮票一样吗?或者如同 TTC 与 Presto 公交卡一样, TTC 公交卡是地方性的,只能在多伦多市使用,到别的城市即失效。而 Presto 公交卡,是global, 可以在全省或者全国使用。SAS macro variables 不正与这些东东相似吗? 联想对比,举一反三,是学习的重要方法。

又有同学说,报告周老师,还是不理解,因为太幼齿,没有赶上粮票年代。周老师只能定定地看着该同学,深深地叹了一口气说:

太青春不一定是好事。出来混,都是要还的 ~~~  :-)

Responses

error: Content is protected !!