SAS中文论坛

标题: 奇怪的排序—求助 [打印本页]

作者: shiyiming    时间: 2009-8-2 11:39
标题: 奇怪的排序—求助
大侠们:小弟遇到一个比较困难的排序问题,希望高手不吝赐教!
数据集样本
date  f1  f2  f3  f4  f5  f6  f7
1-1    1    2   3   8    9   15  4
1-2    5    2   8   7    52   4  1
1-3    5    8   1    2    4    4  7
1-4    0    1    2   1    8    9   4
1-5   4     8    7   1    2    3   2
...
问题是,对每一天,找出7个字段中最大的三个值,然后用1代替,其余的值用0代替。
比如得到
date  f1  f2  f3  f4  f5  f6  f7
1-1    0   0    0   1    1   1   0
1-2    0   0    1   1    1   0   0
1-3    1   1    0    0   0   0   1
...
作者: shiyiming    时间: 2009-8-2 12:24
标题: Re: 奇怪的排序—求助
可以用个do while循环3次,记3个临时变量,每次取MAX,记录下字段名后就赋.,让它 变成最小,循环结束将3个变量赋1,其他赋0。

比较简陋,抛砖引玉
作者: shiyiming    时间: 2009-8-2 13:48
标题: Re: 奇怪的排序—求助
[code:qunuzjjr]data original;
        input date $ f1 f2 f3 f4 f5 f6 f7;
datalines;
1-1 1 2 3 8 9 15 4
1-2 5 2 8 7 52 4 1
1-3 5 8 1 2 4 4 7
1-4 0 1 2 1 8 9 4
1-5 4 8 7 1 2 3 2
;

data final;
        set original;
        array arr{2,7} f1-f7 t1-t7;
        do i=1 to 7;
                temp=arr(1,i);
                arr(2,i)=.;
                do j=1 to 7;
                        if temp>=arr(1,j) then arr(2,i)+1;
                end;
        end;
        do i=1 to 7;
                if arr(2,i)>4 then arr(1,i)=1;
                else arr(1,i)=0;
        end;
        keep date f:;
run;[/code:qunuzjjr]

TO: simonjinxl
如果记录是这样的怎么处理?
date f1 f2 f3 f4 f5 f6 f7
1-1 1 2 3 8 9 15 8
作者: shiyiming    时间: 2009-8-2 17:56
标题: Re: 奇怪的排序—求助
sas 9.0或以上版本新增函数call sortn();可以解决这个问题




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2