全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2252 7
2008-01-30

求助高手:排序的问题

有一些股票,假设如下左表(解释一下):A B C 3只股票,第1天C股涨1%,第2天C股没涨累计第1天,B股涨1%,

第3天C股又涨1%累计为2%,B股没涨,而A股涨2%

 

A

B

C

ID1

ID2

ID3

第1天

0

0

1

C

B

A

第2天

0

1

1

A

C

C

第3天

2

1

2

B

A

B

 用OROC TRANSPOSE转置语句,排序得上右表:ID1(第1天)C最大,B最小。ID2(第2天)B最大,A最小。。。                                                                      

  data a;    input id$ x1 x2 x3;    cards;

 A 0 0 2

 B 0 1 1

 C 1 1 2

 ;

 RUN;

proc sort data=a(keep=id x1 rename=(id=id1)) out=b1;

 by descending x1 ;    run;

proc sort data=a(keep=id x2 rename=(id=id2)) out=b2;

 by descending x2;     run;

proc sort data=a(keep=id x3 rename=(id=id3)) out=b3;

 by descending x3;     run;

data out(keep=id1 id2 id3);

 merge b1 b2 b3;       run;

问题:到第2天B股才涨1%,C股第1天就涨1%,可结果B股插到C股的前面。

          第3天A股后涨2%,C股累计也是2%,可A股又插到C股的前面。

         求助高人,有没有办法解决上述问题,按照先来后到的次序排列。

               谢谢!!!!!!!!!

                                                                                                                    

二维码

扫码加我 拉你入群

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

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

全部回复
2008-2-5 07:01:00

data temp;
 input A B C;
 cards;
 0 0 1
 0 1 1
 2 1 2
 ;
run;
proc transpose data = temp out = temp1;
run;


data temp1;
 set temp1;
 rank = sum(col1, col2, col3);
run;

%macro rank();
%do i =1 %to 3;
proc sort data = temp1 out = table&i (keep = _name_  rename=(_name_ = stock&i) );
by  descending rank descending col&i;
run;
%end;
%mend;

%rank();
data final;
 merge table1 table2 table3;
 label stock1 = "day1";
 label stock2 = "day2";
 label stock3 = "day3";
run;

/***It works, not efficient though. ***/

二维码

扫码加我 拉你入群

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

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

2008-2-5 14:33:00

非常感谢olover 高人!!   谢谢回帖。好象还是不对。

[此贴子已经被作者于2008-2-8 22:11:20编辑过]

二维码

扫码加我 拉你入群

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

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

2008-2-8 22:14:00

    为解决1楼提出的问题,高手还有其他方法吗?

[此贴子已经被作者于2008-2-12 11:41:56编辑过]

二维码

扫码加我 拉你入群

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

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

2008-2-9 18:24:00
头看运了
二维码

扫码加我 拉你入群

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

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

2008-2-12 20:14:00

不知道这个怎样:

data a;                                                                                                                                
input id$ x1 x2 x3;   
cards;                                                                                                          
A 0 0 2                                                                                                                               
B 0 1 1                                                                                                                               
C 1 1 2                                                                                                                               
;                                                                                                                                     
run;

%let n=3;  
                                                                                                                            
%macro rank;                                                                                                                           
        %do i=1 %to &n;                                                                                                                
                proc sort data=a out=day&i(keep=id rename=(id=day&i));                                                                 
                        by                                                                                                             
                        %do j=&i %to 1 %by -1;                                                                                         
                        descending x&j                                                                                                 
                        %end;                                                                                                          
                        ;                                                                                                              
                run;                                                                                                                   
        %end;                                                                                                                          
%mend rank; 
                                                                                                                          
%rank;
                                                                                                                                
%macro print;                                                                                                                          
data out;                                                                                                                                
        merge                                                                                                                          
        %do i=1 %to &n;                                                                                                                
        day&i                                                                                                                          
        %end;                                                                                                                          
      ;                                                                                                                                
run;                                                                                                                                   
proc print;                                                                                                                            
run;                                                                                                                                   
%mend print;
                                                                                                                          
%print;

二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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