SAS中文论坛

标题: 宏变量问题的精彩解说 [打印本页]

作者: shiyiming    时间: 2003-12-17 23:37
标题: 宏变量问题的精彩解说
我看到一个宏中间有这样的一段程序(因为宏比较长不全部贴上来了)
proc freq data=&data.;
                tables &var. / missing;
                format &var. &fmt..;
        run;
        title;
我想请教的是:&data.这个宏变量后面的.有什么作用?&fmt..后面的..又有什么作用?在什么时候需要注意这些问题?望各位大虾不吝赐教,谢谢!
作者: shiyiming    时间: 2003-12-18 17:44
标题: Re: 一个宏中间的问题!
[quote="zhu963396":bb887]
我想请教的是:&data.这个宏变量后面的.有什么作用?&fmt..后面的..又有什么作用?在什么时候需要注意这些问题?望各位大虾不吝赐教,谢谢![/quote:bb887]

&data.这个宏变量后面的.有什么作用?
[color=blue:bb887]-- 是用来表示宏变量名的结尾标记[/color:bb887]

&fmt..后面的..又有什么作用?
[color=blue:bb887]--第1个.同上,用来表示宏变量&fmt.的结尾标记;第2个.表示格式format.[/color:bb887]

在什么时候需要注意这些问题?
[color=blue:bb887]理解了宏变量和宏的实质,这些就迎刃而解。[/color:bb887]

1)宏变量和宏实际上就是字符替换技术。SAS系统用.来表示宏变量名称的结尾,但遇到以下一些符号时也可结束宏变量名称,如空格 / ; 等等。所以您的程序中第1行和第2行中.可以省略。

说得再专业些就是:SAS宏编译器在对程序进行scan时,遇到以&开头和以.结尾(或者上述提到的其它符号)的字母就视为一个宏变量,然后到符号表(symble table,存放宏变量及其值的地方)中查这个宏变量所代表的字符,最后替换。

2)您不妨想想第3行是如何进行替换?

先分别替换&data.和&fmt.,然后组成了一个format名称。假定
&data.=DS &fmt.=FMT,则&var. &fmt..最终替换成 DSFMT. 。不妨试一下第3行如果没有.会替换成什么?

3)毫无疑问,不可少的.是万万不可少的,想想替换方法就应该清楚些

4)对于可写也可不写的.,根据习惯而定。有些人习惯都加上.,就同你的程序。我的习惯是只有在遇到空格时才省略。

SAS宏并不难,难在对它的实现方法的理解。下次COPY几个papers供参考。
作者: shiyiming    时间: 2003-12-19 12:54
十分经典的解说!佩服!
作者: shiyiming    时间: 2003-12-19 16:09
确实经典,正中问题的核心。

今后还请zibao多多指教呀!
作者: shiyiming    时间: 2003-12-21 11:07
各位,

<!-- m --><a class="postlink" href="http://support.sas.com/usergroups/sugi/sugi28/hands_on/p192-28.zip">http://support.sas.com/usergroups/sugi/ ... 192-28.zip</a><!-- m -->

Hands On Workshop 192: Macro Power
Ian Whitlock and Quentin McMullen
SAS Users Group International (SUGI-28), Seattle WA, 2003

The basics of macro programming will be illustrated with many examples to execute and modify.  We will start with the concept of a macro as a parameter-driven unit of code, and then add macro decisions, looping, and variables. In the end we will have macros getting help from other macros to solve significant problems.

====================
这是Ian最近一次的讲座(及paper),是在SUGI28 。

Ian Whitlock是个非常热心的SAS-Ler,guru级别。若有兴趣可在SAS-L上查看Ian的posts,也可以在SUGI查看他写的许多papers。 我一直非常喜欢看他写的papers。

Ian 尤其乐意帮助初学者,深入浅出地讲解SAS的内在奥妙,大家可以用"Ian Whitlock" 和 "Newbie"查看部分posts。

SAS-L(browse at google): <!-- m --><a class="postlink" href="http://groups.google.com/groups?hl=en&amp;lr=&amp;ie=UTF-8&amp;safe=off&amp;group=comp.soft-sys.sas">http://groups.google.com/groups?hl=en&amp;l ... ft-sys.sas</a><!-- m -->

SUGI: <!-- m --><a class="postlink" href="http://support.sas.com/usergroups/sugi/proceedings/index.html">http://support.sas.com/usergroups/sugi/ ... index.html</a><!-- m -->

Hope _this_ helps,
作者: shiyiming    时间: 2003-12-23 00:44
标题: Re to Zibao:
您的讲解真是一针见血,精辟精辟!
   有您这样的良师,使我对学好SAS充满信心,谢谢!
作者: shiyiming    时间: 2004-3-3 16:24
标题: 不错!
GOOD! <!-- s:lol: --><img src="{SMILIES_PATH}/icon_lol.gif" alt=":lol:" title="Laughing" /><!-- s:lol: -->




欢迎光临 SAS中文论坛 (http://mysas.net/forum/) Powered by Discuz! X3.2