|
沙发
楼主 |
发表于 2004-4-27 17:11:55
|
只看该作者
Re: 数据集转换问题
[quote="kavid":fafc1]现知道数据集如下
A B
1 5
22 6
3 7
....
比如A的最小值为1最大值为41
那么按A数值大小等分为五组:1-8,9-16,17-24,25-32,33-41
可以生成五个新的数据集:B1,B2,B3,B4,B5 ;B1中变量A的值落在1-8,B2中变量A的值落在9-16以此类推。
问如何实现,该类数据集较多,无法每次观测A的最大最小值[/quote:fafc1]
以数据集TEM为例,下面的宏可以自动识别变量A的最大值,然后从1开始,每隔8将数据集拆分,生成数据集B1,B2,B3,B4......
/**** 模拟数据集 ******/
data tem(drop=i);
do i=1 to 11;
a=i*4;
b=rannor(1)*4+1;
output;
end;
run;
/**** 根据变量A对数据集进行拆分 ******/
%macro split;
proc sql noprint;
select max(a) into:max from tem;
quit;
%do i=1 %to %sysevalf(&max/8,ceil);
data b_&i;
set tem;
where a>=8*(&i-1)+1 and a<=8*&i;
run;
%end;
%mend split;
%split; |
|