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;
call symput的功能是可以在data step内将值塞到一个macro变量里面。如果这个macro变量已经存在,那这个call就会更新该macro变量的值。用法: call symput (macro变量, text);注:不会自动去除值前后的空格eg.将值Cookie塞入macro变量Gift里面,值必须给予单引号call symput ('Gift','Cookie')
[SAS] CALL
SYM
PUT与CALL
SYM
PUTX
CALL
SYM
PUT的功能是可以在DATA step内将值塞到一个macro变量里面。如果这个macro变量已经存在,那这个call就会更新该macro变量的值。
2. Call
Sym
put('xxx','yyy');
3. select xxx into: yyy.
三种定义方式最大的区别是在MACRO
函数
内定义所生成的宏变量的类型不同:
Call
Sym
put在宏
函数
中定义的宏变量可以在
函数
外调用;而%let和 Select into则不能,因为这2种方法在MACRO函
注:<>表示可选内容
data null;
call
sym
putx(’ items ', ’ leading and trailing blanks removed ‘,
‘lplace’);
call
sym
putx(...
data _null_;
call
sym
put("t_year",put(intnx('day',date(),-1),year4.)); *昨天的当前年份;
call
sym
put("l_year",put(intnx('year',intnx('day',date(),-1),-1),year4.)); *昨天的上年年份;
call
sym
put("...
set table;
if lag(start_date) eq end_date then call
sym
put('flag','true');
else call
sym
put('flag','false');
%if &flag eq 'true' %then %do;
do i=1 to 50;
if lag(start_date) eq end_date then do;
output;
%end;
else %do;
do i=1 to 50;
if lag(start_date) ne end_date then do;
output;
%end;