ziyenano 发表于 2012-9-13 15:03 
%macro k(t,h);
proc iml;
use hh_1;read all into x_1; [/ba ...
谢谢你那么细心的回答问题,还带注释,十分感动。不过我还得问一下,我sas刚学,可能还有很多东西不知道,所以麻烦啦!我把刚才的程序的单个数据集想换成30个,加个循环就又报错了。并且我想在其他地方调用这个宏产生的矩阵,还不知道怎么用。麻烦啦。程序如下:
%macro k(t,h,n);
proc iml;
%do &n=1 %to 30;
use hh_&n; read all into x_&n;hs_&n=nrow(x_&n);a=j(hs_&n,hs_&n,0);
call symput('hs_&n',compress(char(hs_&n)));
%do i=1 %to &(hs_&n);
%if %sysfunc(abs(&i-&t)) le &h %then %do;
kh=(3/4*&h)*(1-((&i-&t)/&h)*((&i-&t)/&h));a[&i,&i]=kh;%end;
print a;
%end;
%end;
quit;
%mend;
%k(1,10,n);
我不明白宏参数中的n为什么要加,因为不加的话,不对。谢谢啦!