|
地板

楼主 |
发表于 2011-3-22 11:15:44
|
只看该作者
Re: 把数组元素当宏参数?
谢谢!
其实没什么,还是之前的那个,我怕乱简化了。不是什么商业的,只不过有个问题在那里卡着难受。而且我想看看到底行不行,可以增加建模灵活度应该。
我还是明确下比较好。谢谢京剧,但是sel必须是array,大家一看下面的代码就明白了。call execute被秒杀了,symput我的水平搞不定,fcmp+runmacro还不确定,
array传导在runmacro方面估计是个问题,考虑用label,可是我印象中label支持字符,sel(1)这样的估计解析够呛。
%macro a;
data a;
array sel[12] (6,5,7,9,10,12,14,8,2,1,3,4);
/*array fn[12] fn1-fn12;*/
%let c=1;
%let cd=2|exp(&fn12)|5|12|(fn3*fn4)|exp(&fn2)|(fn5-fn6)|4|sum(fn7,fn8)|sum(fn9,fn10)|7|log(&fn11)|9|3|6;
%let fn1=%SCAN(&cd,6,|);
%let fn2=%SCAN(&cd,5,|);
%let fn3=%SCAN(&cd,7,|);
%let fn4=%SCAN(&cd,9,|);
%let fn5=%SCAN(&cd,10,|);
%let fn6=%SCAN(&cd,12,|);
%let fn7=%SCAN(&cd,14,|);
%let fn8=%SCAN(&cd,8,|);
%let fn9=%SCAN(&cd,2,|);
%let fn10=%SCAN(&cd,1,|);
%let fn11=%SCAN(&cd,3,|);
%let fn12=%SCAN(&cd,4,|);
fn12=&fn12.;
fn11=&fn11.;
fn10=&fn10.;
fn9=&fn9.;
fn8=&fn8.;
fn7=&fn7.;
fn6=&fn6.;
fn5=&fn5.;
fn4=&fn4.;
fn3=&fn3.;
fn2=&fn2.;
fn1=&fn1.;
run;
%mend;
%a;
上面的利用了sas解析的漏洞,可以实现解析,别看报错。
但是那个array sel得靠它标号~~call execute平时可以用,但是这样里面它最后解析,就是个问题。
要是有把sel变成字符串宏变量也行(我知道宏变量其实就是字符串)。
另外注意一个data步,就是log显示为一个data+run的,fcmp+runmacro,runmacro多少data步都行。直接宏内嵌的话应该够呛~ <!-- s:lol: --><img src="{SMILIES_PATH}/icon_lol.gif" alt=":lol:" title="Laughing" /><!-- s:lol: -->
好像涉及到了data步和macro以及各个函数的解析顺序问题,这种东西对我来说,有点儿难~各位大侠,就帮帮小弟吧~ |
|