注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

数据挖掘

学习数据挖掘

 
 
 

日志

 
 

SAS宏资料总结  

2013-07-21 21:32:31|  分类: SAS |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
SAS宏资料总结

书写原则
SAS 书写原则(如何养成好的编写宏的习惯) 文库链接:http://wenku.baidu.com/view/524cb30ade80d4d8d15a4f21.html

SAS宏的主要功能&解决什么问题


SAS分为用户定义的宏变量 、系统自定义的宏变量。

    一些主要的自动宏变量:
     A SYSDATE   SAS进程开始的日期;
     B SYSDATE9 以Date9.格式显示SAS进程开始的日期;
     C SYSTIME   SAS进程开始的时间;
     D SYSSCP    使用的操作系统;
     E SYSDAY    SAS进程开始是为星期几;
     F SYSVER    SAS的版本;
     G SYSLAST   最新创建的SAS数据集的名字; 
    查看SAS所有自动宏变量的命令: %put _automatic_;
    系统选项:options symbolgen是显示每个宏变量解读的值;

系统自定的宏变量:获取SAS系统信息
SAS在启动时就创建了一些自动宏变量,用以存储当前SAS进程启动的日期,时间,版本号及其它信息,用户可以在任何情况下使用这些宏变量。

条件执行过程步和数据步

例如每天提交一份生产情况的详细报告,每周五增加一份汇总报告。使用宏功能每天运行同一个程序就可以实现上述任务

开发交互式系统

使用SAS宏语言的%WINDOW语句及一些基本的编程语句可开发交互式用户界面。

产生与数据无关的SAS程序,但可展示与数据有关的结果


宏功能可保持SAS程序的独立性和移植性。一段程序在多种情况下均可运行,得到期望的结果。

在不同的SAS数据步或过程步之间传递数据

SAS宏变量可在SAS的任何地方被引用,具有全局性,所以成为不同过程间传递数据最方便的手段。

重复执行SAS程序.


用户定义的宏变量:

1) 定义形式:%let 变量名=值;或是call symput(变量名,变量值);
     查看SAS所有用户定义的宏变量的命令:%put _user_;
     注意:查看所有的宏变量的命令:%put -all-;
2) 符号表(symbol table):
     对于宏变量,不论是自动的还是用户定义的,系统都将其存在符号表中;
     表有两列,一列是变量名,另一列是值;自动的宏变量都存在一张符号表
     中,用户定义的宏变量可以存在不同的符号表中;

6 宏变量定义和使用的进一步介绍.

以下内容来自:http://saslist.net/archives/122

创建SAS宏变量的方法以及举例

1、通过直接赋值或通过宏函数创建宏变量 最基本最常用的

%let mv = 100;

%let dsid=%sysfunc(open(sashelp.class));

%let nvars=%sysfunc(attrn(&dsid,nvars));
%let nobs=%sysfunc(attrn(&dsid,nobs));
%let dsid=%sysfunc(close(&dsid));
%put &nvars.;
%put &nobs.;

2、通过data步接口子程序call symputx与call symput(两者有区别)

a, 创建单个宏变量

1
2
3
4
5
6
7
8
9
10
call symput('x', x);
run;
data _null_;
set sashelp.class nobs=obs;
call symputx('m1',obs);
call symput('m2',obs);
Stop;
run;
%put &m1.;
%put &m2.;

b, 为某变量的每个值创建一个宏变量

data _null_;
set sashelp.class;
suffix=put(_n_,5.);
call symput(cats(‘Name’,suffix), Name);
run;

c, 为表的每个值创建一个宏变量

data _null_;
set sashelp.class;
suffix=put(_n_,5.);
array xxx{*} _numeric_;
do i =1 to dim(xxx);
call symput(cats(vname(xxx),suffix),xxx);
end;
array yyy{*} $ _character_;
do i =1 to dim(yyy);
call symput(cats(vname(yyy),suffix),yyy);
end;
run;


3、proc sql方法 这个用法有很多的灵活性


a. 通过SQL过程用变量值创建一个宏变量


proc sql noprint;

select distinct sex

into :list_a separated by ‘ ‘

from sashelp.class;

quit;

%put &list_a.;


b.通过SQL过程创建多个宏变量


proc sql noprint;

select nvar,nobs

into:nvar , :nobs

from dictionary.tables

where libname = ‘SASHELP’ and memname = ‘CLASS’;

quit;

%put &nvar.;

%put &nobs.;


c. 通过contents和sql过程用变量名创建宏变量


proc contents data=sashelp.class out=con_class;

run;

proc sql noprint;

select name,put(count(name),5.-l)

into :clist separated by ‘ ‘,:charct

from con_class

where type=2;

quit;

%put &clist.;

%put &charct.;


d.通过SQL过程用宏变量创建宏变量列表


proc sql noprint;

select name

into :clist1-:clist999

from dictionary.columns

where libname = ‘SASHELP’ and memname = ‘CLASS’;

quit;

%put &clist1.;

%put &clist2.;


e.通过SQL过程用变量值创建宏变量列表


proc sql noprint;

select count(distinct sex)

into :n

from sashelp.class;

select distinct sex

into :type1 – :type%left(&n)

from sashelp.class;

quit;

%put &n.;

%put &type1.;


4、使用call set call set是我们处理对照表数据最强的武器,不但灵活方便,而且性能上是最优的。



%macro doit;

%let id=%sysfunc(open(sashelp.class));

%let NObs=%sysfunc(attrn(&id,NOBS));

%syscall set(id);

%do i=1 %to &NObs;

%let rc=%sysfunc(fetchobs(&id,&i));

%put # # # Processing &Height # # #;

%end;

%let id=sysfunc(close(&id));

%mend;



SAS 宏相关的函数


SAS通配函数

%sysfunc http://powerelite.blog.163.com/blog/static/42965891201342894847690/



SAS 宏函数列表以及使用示例

参考:http://support.sas.com/documentation/cdl/en/mcrolref/61885/HTML/default/viewer.htm#a000208971.htm


%BQUOTE   引用一个可分辨的值,不包括未处理的特殊符号和寄存器操作符。

 %NRBQUOTE   引用一个可分辨的值,包括未处理的特殊符号和寄存器操作符。

%EVAL 

%INDEX 

%LENGTH 

%NRBQUOTE 

%NRQUOTE 

%NRSTR 

%QSCAN 

%QSUBSTR 

%QSYSFUNC 

%QUOTE and %NRQUOTE 

%QUPCASE 

%SCAN and %QSCAN 

%STR and %NRSTR 

%SUBSTR and %QSUBSTR 

%SUPERQ 

%SYMEXIST 

%SYMGLOBL 

%SYMLOCAL 

%SYSEVALF 

%SYSFUNC and %QSYSFUNC 

%SYSGET 

%SYSPROD 

%UNQUOTE 

%UPCASE and %QUPCASE 


options 选项

symbolgen/nosymbolgen, when this option is on, sas prints in your log  the values of the macros;
MPRINT | NOMPRINTwhen this option is on, SAS prints in your log the standard SAS code generated by macros.

MLOGIC | NOMLOGIC: when this option is on, SAS prints in your log details about the execution of macros.
  评论这张
 
阅读(5071)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017