全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
8671 16
2011-07-22
各位大侠,我想取前100行的最小值,怎么实现。可以考虑以下测试数据。x1 x2
01 1
01 2
01 1
01 4
01 5
02 1
02 -3
02 3
02 4
02 5
;
X1是分组变量,我想取X2的每个分组变量前三行的最小值。
我用sql的group by做,但是由于数据量很大,要循环几千次,相当慢,不知道各位大侠有什么好的办法。谢哈~~
二维码

扫码加我 拉你入群

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

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

全部回复
2011-7-22 16:28:45
data test;
  input x1 x2;
  cards;
01 1
01 2
01 1
01 4
01 5
02 1
02 -3
02 3
02 4
02 5
;

*** Solution 1;
data test1;
    set test;
        by x1;
        retain min_x2;
        keep x1 min_x2;
        if first.x1 then do;
           n=1;
           min_x2=x2;
        end;
        else do;
       n+1;
           min_x2=min(min_x2,x2);
           if n=3 then output;
        end;
run;
二维码

扫码加我 拉你入群

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

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

2011-7-22 16:39:29
2# pobel 可能我说的有点歧义,我想得到
x1 x2 x3
01 1 .
01 2 .
01 1 1
01 4 1
01 5 1
02 1 .
02 -3 .
02 3 -3
02 4 -3
02 5  3
;
每一行都要找到前三行的最小值,谢谢!
二维码

扫码加我 拉你入群

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

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

2011-7-22 16:46:43
这个sql貌似真的小小复杂,还是data步比较直观啊
二维码

扫码加我 拉你入群

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

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

2011-7-22 16:59:20
4# soporaeternus 是啊,data步不大清楚怎么弄,哎,sas就是行处理比较麻烦
二维码

扫码加我 拉你入群

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

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

2011-7-22 17:18:51
data test1;
    set test;
        by x1;
        retain  min_x2;
        drop n min_x2;
        if first.x1 then do;
           n=1;
           min_x2=x2;
        end;
        else do;
       n+1;
           if n<=3 then min_x2=min(min_x2,x2);
           put x1= min_x2=;
        end;
        if n>=3 then  min=min_x2;
run;
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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