看不懂这么复杂SAS 那个 %macro 就是传说中的宏么?
不过似乎R可以用更短的程序来完成这个工作
<br />
dat='id var1 name<br />
1 32 shsh<br />
1 11 xxkx<br />
1 3 sjdlj<br />
2 65 sald<br />
2 33 ijfi<br />
2 21 sdfjl<br />
2 10 dsflj <br />
3 34 adfd <br />
3 22 etete<br />
3 12 dfeer<br />
3 4 ssey<br />
3 3 dfdfr<br />
5 12 gergd<br />
5 33 adfa<br />
5 2 dfdee<br />
5 6 adfer<br />
5 77 errrr<br />
5 8 desdfde<br />
8 16 rgergd<br />
8 39 ddadfa<br />
8 24 redfdee<br />
8 61 ddadfer<br />
8 7 dferrrr<br />
8 82 dksdfde<br />
'<br />
dat=read.table(textConnection(dat),head=T);attach(dat)<br />
rslt=as.data.frame(t(<br />
sapply(<br />
lapply(unique(id),<br />
function(x){<br />
tmp=dat[id==x,];<br />
tmp[-1][order(tmp$var1,decreasing=T)[1:3],]}),<br />
function(x)as.vector(t(x)))))<br />
colnames(rslt)=as.vector(rbind(paste("var1",1:3,sep="."),<br />
paste("name",1:3,sep=".")))<br />
rslt[1:3*2-1]=apply(rslt[1:3*2-1],2,as.numeric)<br />
(rslt=cbind(id=unique(id),rslt));detach(dat)<br />