SAS | macro variables macro

宏变量macro variable

宏变量是SAS宏工具的一部分,该工具用于扩展和定制SAS,并用于减少执行常见任务所必须输入的程序代码量
automatic macro variables自动宏变量
SAS创建并定义了一些自动宏变量。自动宏变量包含有关计算机环境的信息,比如会话的时间和日期,以及正在运行的SAS版本等,调用宏变量需要在宏变量名前面加上&
automatic variables

/*自动宏变量*/

/*sysscp 目前使用的操作系统的缩写*/
/*sysver 正在使用的SAS版本*/
footnote1 "Created &systime &sysday, &sysdate9";
footnote2 "on the &sysscp system using Release &sysver";
title "REVENUES FOR DALLAS TRAINING CENTER";
proc tabulate data=all(keep=location course_title fee);
   where upcase(location)="DALLAS";
         class course_title;
         var fee;
         table course_title=" " all="TOTALS",
               fee=" "*(n*f=3. sum*f=dollar10.)
               / rts=30 box="COURSE";/*标签不加任何内容相当于去掉变量名*/
run;

在这里插入图片描述

user-defined macro variables用户自定义宏变量
定义格式:

%let variable=value;

variable是符合SAS约定的任何名称;value可以是取值范围为0 ~ 65535的任意字符串。
NOTE:
1)宏变量自定义的所有值都存储为字符串(此处字符串的含义与string不同,只是表名value是什么,variable的值就是没有,不做任何操作);
2)不计算数学表达式;
3)保留值的情况;
4)括文字的引号作为值的一部分存储;
5)在复制之前,自动删除值中的前导空格和尾随空格
调用宏变量要在宏变量名前加上&

/*用户自定义变量*/

%let site=DALLAS;      /*Boston  Seattle*/
title "REVENUES FOR &site TRAINING CENTER";
footnote;
proc tabulate data=all(keep=location course_title fee);
     where upcase(location)="&site";
     class course_title;
     var fee;
     table course_title=' ' all='TOTALS',
             fee=' '*(n*f=3. sum*f=dollar10.)
             / rts=30 box='COURSE';
run;

在这里插入图片描述

宏macro

宏能够将少量或大量的文本打包到具有名称的单元中,之后在使用这个文本内容时就可以直接调用宏而不用重复输入该文本,这样不仅减少了程序员的无用功,而且也可以让代码更简洁,维护也更加方便快捷。
定义一个宏的基本格式:

%macro macro-name;
text
%mend ;

macro-name定义宏的名称;
text可以是常量文本,可能包括SAS数据集名称、SAS变量名称或SAS语句;也可以是宏变量、宏函数或宏程序语句。
调用宏需要在宏名称前加上%
如果在调用宏时想要查看宏的内容,可以在调用宏的语句前加上一句option mprint;
宏注释:

%* comment;

/*defining a basic macro*/
%macro prtlast;
	proc print data=&syslast (obs=5);
	title "Listing of &syslast data set";
	run;
%mend;


/*defining a macro with positional parameters*/
%macro printdsn(dsn,vars);
	proc print data=&dsn;
		var &vars;
		title "Listing of %upcase(&dsn) data set";
	run;
%mend;

/*defining a macro with keyword parameters*/
%macro printdsn(dsn=sasuser.courses,vars=course_code course_title days);
	proc print data=&dsn;
		var &vars;
		title "Listing of %upcase(&dsn) data set";
	run;
%mend;

/*using the %if-%then statement*/
%macro choice(status);
	data fees;
		set sasuser.all;
		%if &status=paid %then %do;
			where paid='Y';
			keep student_name course_code begin_date totalfee;
		%end;
		%else %do;
			where paid='N';
			keep student_name corse_code begin_date totalfee latechg;
			latechg=fee*1.10;
		%end;
		/* add local surcharge */
		if location='Boston' then totalfee=fee*1.06;
		else if location='Seattle' then totalfee=fee*1.025;
		else if location='Dallas' then titalfee=fee*1.05;
	run;
%mend choice;
/*定义一个宏*/
%macro prtlast;
   proc print data=&syslast (obs=5);
   title "Listing of &syslast data set";
   run;
%mend;


proc sort data=schedule out=schedule;
  by begin_date;
run;

%prtlast          /*没有分号*/


/*也可以在宏中使用注释符号,当这些符号出现时,宏处理器将忽略注释中的文本*/
%macro printit;
  %* The value of &syslast will be substituted appropriately ;
  %* as long as a data set has been created during this session. ;
  proc print data=&syslast(obs=5);
  /* Print only the first 5 observations */
  title "Last Created Data Set Is &syslast";
  run;
%mend;


proc sort data=schedule out=schedule;
  by begin_date;
run;

%printit
解析宏变量

通过解析宏变量可以观察到宏的运行但不能看到宏的定义即宏定义的代码

option mprint;
%macro-variable;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值