寻找最大值
这个问题很常见 也很简单。这里主要看看高手bobugy的SQL程序和hopewell的DATA步的程序
第一个SQL
data t1;
do i=1 to 10;
g=ceil((3*ranuni(1)));
x=round((10*ranuni(1)));
output;
end;
run;
proc print; run;
proc sql;
select *, max(x) as max_x
from t1
group by g
order by 2,1
;
quit;
这个SQL很简单,但是很简洁,值得学习的就是order by 里面的 2, 1
其实这个等价于 order by x,i;
例外用了MAX函数,要学会在SQL里面使用函数,不仅仅是MAX其他函数都可以。
看看hopewell的程序:
data raw;
input group value;
datalines;
1 3
1 5
1 8
2 1
2 5
3 3
3 5
3 1
4 5
4 12
4 8
;
data out;
do _n_=1 by 1 until(last.group);
set raw;
by group;
max=max(value,max);
end;
do _n_=1 to _n_;
set raw;
output;
end;
run;
这个DATA步如果对于大量数据来说,效果应该是由于SQL语句的
在DATA步里面,实际上实现的是迭代,MAX为迭代变量。具体DO 循环改变DATA步运行程序对读入数据的比较可以看看跟crackman读SAS程序其他系列,说的很清楚。
后面的DO _N_=1 TO _N_;的循环等价 DATA OUT;SET RAW;
|