全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1933 2
2013-11-28
悬赏 5 个论坛币 已解决
bbs.xlsx
大小:(31.33 KB)

 马上下载


附件中是我的问题需要用到的数据,一共768个观测值,16个一组,也就是1-16第一组,17-32第二组,。。。,753-768第48组,总共48组,每一组都有16个BID1,16个BID2,16个BID3,我想加入三列,第一列是“posted BID1”,数值是BID1各组第二大的数,具体说,“posted BID1”头16个数是第一组BID1中第二大的数,第二个16个数是第二组BID1中第二大的数。。。加入的第二列“posted BID2”和第三列“posted BID3”与加入的第一列类似,只不过我想要BID2和BID3中每组第二大的数。下面图片中我以第一组为例。最后我想每一组都能将第二大的数找出,并生成相应的列。不知道SAS可不可以做。希望会的同学指教,十分感谢!!
bbs.jpg



bbs.jpg

原图尺寸 61.56 KB

bbs.jpg

最佳答案

wwang111 查看完整内容

data bbs1; set bbs nobs=nobs; retain grp; if _n_=1 then grp=1; do i=1 to nobs; if ((_n_-1)/16)=i then grp+1; end; drop i; run; proc transpose data=bbs1 out=bbs2(drop=_label_); by notsorted grp; var bid1-bid3; run; data bbs3; set bbs2; call sortn (of col16-col1); array var[16] col1-col16; do i=1 to 15; if var ne var then do; max2=var; leave; en ...
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-11-28 04:15:12
data bbs1;
set bbs nobs=nobs;
retain grp;
if _n_=1 then grp=1;
do i=1 to nobs;
if ((_n_-1)/16)=i then grp+1;
end;
drop i;
run;

proc transpose data=bbs1 out=bbs2(drop=_label_);
by notsorted grp;
var bid1-bid3;
run;

data bbs3;
set bbs2;
call sortn (of col16-col1);
array var[16] col1-col16;
do i=1 to 15;
   if var[i] ne var[i+1] then do;
     max2=var[i+1];
     leave;
   end;
end;
keep grp _name_ max2;
run;
proc transpose data =bbs3 out=bbs4(drop=_name_) prefix=post_;
by notsorted grp;
var max2;
id _name_;
run;

proc sql;
create table wanted(drop=grp) as
select a.*, post_bid1,post_bid2,post_bid3
from bbs1 a join bbs4 b
on a.grp=b.grp;
quit;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-11-28 07:52:59
自己顶一下,盼望高手指点,十分感谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群