call symput与call symputx详解

call symput的功能是可以在data step内将值塞到一个macro变量里面。如果这个macro变量已经存在,那这个call就会更新该macro变量的值。
用法: call symput (macro变量, text);
注:不会自动去除值前后的空格
eg.将值Cookie塞入macro变量Gift里面,值必须给予单引号
call symput ('Gift','Cookie');

call symputx基本写法:
call symputx (macro变量, text);
上面提到call symput不会把值的前后空白去掉,但是call symputx会自动去点前后空格

%let 在编译时赋值,call symput 在data 步执行时才赋值,并且要过了这个data步后才能引用。

平时经常使用的宏变量定义方法有三种:
1. %let xxx=yyy;  /*%let语句几乎可以在程序的任何位置上去定义宏变量*/
2. Call Symput('xxx','yyy'); /*只能在Date Step中定义*/ 
3. select xxx into: yyy. /*只能在Proc SQL中定义*/

三种定义方式最大的区别是在MACRO函数内定义所生成的宏变量的类型不同:
Call Symput在宏函数中定义的宏变量可以在函数外调用;而%let和 Select into则不能,
因为这2种方法在MACRO函数内生成的是局部宏变量,若要想在MACRO函数外调用,需事先用%global申明变量类型。
例子:

%macro test();

/*Method 1*/
data _NULL_;
call symput('Today',put(today(),date9.));
run;

/*Method 2*/
/*%let today=%sysfunc(today(),date9.);*/

/*Method 3*/
/*data todaydate;*/
/*date=today();*/
/*Proc sql noprint;*/
/*select put(date,date9.) INTO: today*/
/*from todaydate*/
/*;*/
/*quit;*/
/*%put &today;*/
%mend;
%test;

%put &today;
  • 13
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值