7月 10, 2011

Posted in | 3 条评论

使用%nowpath宏获取当前SAS路径

前几天学习了一个叫mypath的宏,其实现了将当前sas程序的路径定义为一个宏变量、以方便后续调用路径的功能。查了下相关资料,在《Generating Program-Stamped Output in an Interactive SAS Session》中,也有个叫fullpath的宏,是提取当前路径为宏变量后进行应用。

个人觉得这2个实现路径提取功能的宏及其中的编程技巧挺有用的,拿出来分享一下。

 

1.%nowpath

1.1

将%mypath和%fullpath作了小小改动、整合成了下面的宏%nowpath

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
%macro nowpath;
	%global fullpath nowpath;   /*定义为global,为后续调用准备*/
 
	proc sql noprint;
		select xpath into : fullpath   /*选取全路径*/
			from  dictionary.extfiles  /*dictionary.extfiles包含SAS路径信息*/
			where substr(fileref,4) eq
				(	select max(substr(fileref,4))   /*max()保证选取最新(当前)路劲*/
					from dictionary.extfiles
					where substr(fileref,1,1) eq "#" and index(xpath,".sas") gt 0  	);
	quit;
 
        /*选取当前路径*/
	%let nowpath=%substr(&fullpath,1,%eval(%length(&fullpath)-%length(%scan(&fullpath,-1,\)))); 
 
	%put The Full Path is: &fullpath;
	%put The Now Path is: &nowpath;
 
%mend nowpath;

继续阅读
2月 14, 2011

Posted in | 1 条评论

SAS macro symbol table(2):特殊规则

上篇对macro symbol table的常规应用进行了简单的梳理,本篇对如call symput的非宏语言在建立宏变量时symbol table的特殊规则进行梳理。

1.the into : operator in PROC SQL

“into :”算符并不不属于宏语言,但是其定义宏变量的过程基本与使用%let相同:先由当前local,再向上级直到global中搜寻所定义的宏变量是否存在,再进行相应的处里。参见SAS macro symbol table(1)

style=”text-align: center;”>需要了解的是,在proc sql执行过程中,会自动产生三个包含该proc sql过程信息的宏变量:sqlobs、sqlrc和sqloops,如下:

  • SQLOBS: set to the number of rows produced with a SELECT statement.
  • SQLRC: set to the return code from an SQL statement.
  • SQLOOPS: set to the number of iterations of the inner loop of PROC SQL.

合理的使用以上三个宏变量,对程序的编写可以起到很好的作用。

继续阅读
2月 9, 2011

Posted in | 3 条评论

SAS macro symbol table(1):常规应用

SAS macro语言中,理解宏变量(macro variables)的作用域(the scope)是十分重要的,宏变量的作用域决定着该变量的赋值(assign)及宏处理器(macro processor)对该变量的解析(resolve)。所有的宏变量均存储于符号表(symbol table)中,其分为全局(global)和局部(local)两种。
本文将对SAS macro语言中symbol table的概念及常规应用,结合SAS ADV认证中的一些习题做一些简单的梳理。

1.基本概念

Global symbol table

  • global symbol table在SAS启动(SAS section)的开始就被创建,其默认存储着所有的自动宏变量(automatic macro variables)如sasdate9,sasday等(除了saspbuff之外)。其也可以存储用户自己定义的宏变量。
  • 默认情况下,存储于global symbol table中的宏变量——global macro variables,存在于整个SAS section中,并可以在SAS程序中的任何地方(除了datalines/cards中)被引用(resolved)。

Local symbol table

  • local symbol table在一个包含着宏变量的宏程序执行开始时,才被创建,该宏程序执行结束后,相应的local symbol table自动被清除。
  • 默认情况下,存储于local symbol table中宏变量——local macro variables,仅可以在与该local symbol table对应的宏程序中被引用。

继续阅读
返回顶部