/**** 模拟数据集 ******/
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;作者: shiyiming 时间: 2004-4-27 20:23
小猪,你为什么不考虑最小值呢?在你的基础上,改进一下
%macro split;
proc sql noprint;
select max(a) into :i from tem;
select min(a) into :j from tem;
run;
data d1 d2 d3 d4 d5;
set tem;
%let a=%eval((&i.-&j.)/5); /*间距*/
%do k=1 %to 5;
if %eval(&j+%eval(%eval(&k-1)*&a))<=a<=%eval(&j+%eval(&k*&a)-1) then output d&k;
%end;
run;
%mend;
%split作者: shiyiming 时间: 2004-4-27 20:23
想问一下,用select max(a) as max from term;与into :max有何不同;另外,我想写为select max(a) into:max,min(a) into :min from term好像不能通过,不知为什么?作者: shiyiming 时间: 2004-4-27 22:50
[quote="gbt":6f7cf]想问一下,用select max(a) as max from term;与into :max有何不同;另外,我想写为select max(a) into:max,min(a) into :min from term好像不能通过,不知为什么?[/quote:6f7cf]
select max(a) as max from term
是在结果中建立一个名为max的变量存放max(a)的结果,这个max只能通过结果数据集或视图来访问
select max(a) into :max是建立一个宏变量max来存放max(a)的结果,可以通过宏替换的方式来访问。