|
楼主

楼主 |
发表于 2007-10-14 14:29:16
|
只看该作者
几种给宏变量赋值的方法
Macro Variable是我们最常使用的对象,这里给出几种为宏变量赋值的方法。
1、%let mv = 100; 这恐怕是最常使用的了,每位朋友都是用过吧。
2、使用call symput.
[code:3235d] data _null_;
x = 100;
call symput('x', x);
run;
/*为某变量的每个值创建一个宏变量*/
data _null_;
set sashelp.class;
suffix=put(_n_,5.);
call symput(cats('Name',suffix), Name);
run;
/*为表的每个值创建一个宏变量*/
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;[/code:3235d]
3、proc sql中的select into :mv
[code:3235d] proc sql noprint;
select count(*) into :NObs
from sashelp.class;
select Name into :Name1-:Name%left(&NObs)
from sashelp.class;
quit;[/code:3235d]
4、使用call set
[code:3235d] %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;[/code:3235d]
call set是我们处理对照表数据最强的武器,不但灵活方便,而且性能上是最优的。 |
|