|
板凳
楼主 |
发表于 2004-4-9 10:35:20
|
只看该作者
Re: 关于删除变量的问题!
[quote="hero":6f777]假设在数据集 a 里有90个以字母cov开头变量名,如:cov1,cov2,…,cov90,对应数组 cov(9,10), 现在想删除其中满足一定条件的一部分变量。
%macro ddel;
%do i=1 %to 10;
%do j=1 %to 10;
data t1;
set bf.t1;
if &i.>=&j. then do;
drop cov10*(&i.-1)+&j.; /*这一步有问题,我的本意是当i=1,j=1时,删掉cov1,*/
end;
run;
%end;
%end;
%mend;
请问如何解决?[/quote:6f777]
将data t1;set bf.t1;放在宏内是效率极其不高的,因为每运行一个循环就要打开、扫描和读入一次数据。这样,为了删掉50个变量就需要读100次数据!
不如这样修改,在宏内用循环产生一列字符(如 cov1 cov 11 ...)来代表这些需删掉的变量。然后在data 步直接调用这些字符即可。
%macro dde1;
%do i=1 %to 9;
%do j=1 %to 10;
%if &i.>=&j. %then
cov%eval(10*(&i.-1)+&j.);
%end;
%end;
%mend dde1;
宏ddel将产生字符cov1 cov11...。
例如:
data _test;
array covx(90) cov1-cov90;
run;
/*只要读一次数据*/
data test;
set _test;
drop %dde1; /*相当于 drop cov1 cov11 ...*/
run; |
|