SAS: 宏变量 Macro Variables

SAS中的宏变量类似于shell中的变量。

 

分类:

可以分为系统宏变量和自定义宏变量.

其中系统宏变量是系统自定义的,比如SYSDATE, SYSDATE9,  SYSTIME等,注意这里的SYSTIME表示SAS的启动时间 。

%put today is "&sysdate";
%put Another date: "&SYSDATE9";
%put Time is: "&SYSTIME";
%put Operation system is: "&SYSSCP";

SAS LOG中输出如下:

640  %put today is "&sysdate";
today is "26AUG20"
641  %put Another date: "&SYSDATE9";
Another date: "26AUG2020"
642  %put Time is: "&SYSTIME";
Time is: "20:06"
643  %put "&SYSSCP";
"WIN"
 

 

定义

可以使用%LET variable=value;的方式来定义一个宏变量

示例1:

%let name=qingsong;
%let age=18;

data tmp;
	myname="&name";
	myage=&age;
run;

proc print data=tmp;
run;

输出:

 

查看变量值

%PUT语句

可以使用%PUT查看变量值,这里不需要在引用变量后加上双引号,示例2:

%let name=qingsong;
%let age=18;

%put name is &name;
%put _USER_;

上面程序中的_USER_表示所有用户变量,其中SAS LOG中输出如下:

596  %let name=qingsong;
597  %let age=18;
598
599  %put name is &name;
name is qingsong
600  %put _USER_;
GLOBAL AGE 18
GLOBAL NAME qingsong
GLOBAL NAMEVAR 杰弗瑞_爱丽丝_芭芭拉
GLOBAL SQLEXITCODE 0
GLOBAL SQLOBS 3
GLOBAL SQLOOPS 22
GLOBAL SQLRC 0
GLOBAL SQLXOBS 0
GLOBAL SYS_SQL_IP_ALL -1
GLOBAL SYS_SQL_IP_STMT

 

SYMBOLGEN选项

这个选项开启后,每当引用变量时,可以在SAS LOG中看到,比如:

options SYMBOLGEN;
%let name=qingsong;
%let age=18;

data tmp;
	myname="&name";
	myage=&age;
run;

options NOSYMBOLGEN;

可以在SAS LOG中看到如下:


517  options SYMBOLGEN;
518  %let name=qingsong;
519  %let age=18;
520
521  data tmp;
522      myname="&name";
SYMBOLGEN:  宏变量 NAME 解析为 qingsong
523      myage=&age;
SYMBOLGEN:  宏变量 AGE 解析为 18
524  run;
 

 

变量删除

可以使用%SYMDEL来删除变量,示例3如下:

%let name=qingsong;
%let age=18;

%put name is &name;
%put age is &age;
%symdel age;
%put name is &name;
%put age is &age;

SAS LOG中输出如下:

587  %put namevar is &namevar;
namevar is 杰弗瑞_爱丽丝_芭芭拉
588  %let name=qingsong;
589  %let age=18;
590
591  %put name is &name;
name is qingsong
592  %put age is &age;
age is 18
593  %symdel age;
594  %put name is &name;
name is qingsong
595  %put age is &age;
WARNING: 没有解析符号引用 AGE。
age is &age
 

宏变量和正常字符的组合

如果要在正常的宏变量后面紧跟其他字符,可以使用句号隔开,示例4:

%let name=qingsong;

data tmp;
	name="&name.miao is a full name";
run;

proc print data=tmp;
run;

输出如下:

Obsname
1qingsongmiao is a full name

注意:输出中的qingsong和miao是直接连在一块的。

 

使用SELECT INTO SQL来定义变量

可以使用Select SQL来将结果赋予变量,示例如下:

proc sql;
	select name into:namevar from sashelp.class where age=16;
quit;

data tmp;
	myname="&namevar";
run;

proc print data=tmp;
run;

输出如下:

Obsmyname
1菲利普

 

当然,如果有多个记录,可以使用separated by 'x' 来分割,示例如下:

proc sql;
	select name into:namevar separated by '_' from sashelp.class where age=13;
quit;

%put namevar is &namevar;

可以在SAS LOG中看到如下输出:

namevar is 杰弗瑞_爱丽丝_芭芭拉
 

参考资料:

 

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值