| 
 | 
沙发
 
 
 楼主 |
发表于 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; |   
 
 
 
 |