楼主: l6397
2029 7

[求助]求助高手:排序的问题 [推广有奖]

  • 0关注
  • 0粉丝

博士生

42%

还不是VIP/贵宾

-

威望
0
论坛币
120 个
通用积分
5.1200
学术水平
1 点
热心指数
6 点
信用等级
0 点
经验
3788 点
帖子
235
精华
0
在线时间
178 小时
注册时间
2007-3-28
最后登录
2023-5-13

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

求助高手:排序的问题

有一些股票,假设如下左表(解释一下):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股的前面。

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

               谢谢!!!!!!!!!

                                                                                                                    

二维码

扫码加我 拉你入群

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

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

关键词:求助高手 Transpose ending rename cards 求助 高手

回帖推荐

lili83xu 发表于6楼  查看完整内容

不知道这个怎样:data a;                                                                ...

olover 发表于2楼  查看完整内容

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; merg ...

本帖被以下文库推荐

沙发
olover 发表于 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. ***/

已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 10 精彩帖子

总评分: 经验 + 3  论坛币 + 10   查看全部评分

使用道具

藤椅
l6397 发表于 2008-2-5 14:33:00 |只看作者 |坛友微信交流群

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

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

使用道具

板凳
l6397 发表于 2008-2-8 22:14:00 |只看作者 |坛友微信交流群

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

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

使用道具

报纸
wxq1638 发表于 2008-2-9 18:24:00 |只看作者 |坛友微信交流群
头看运了

使用道具

地板
lili83xu 发表于 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;

已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 10 精彩帖子

总评分: 经验 + 3  论坛币 + 10   查看全部评分

使用道具

7
l6397 发表于 2008-2-13 23:07:00 |只看作者 |坛友微信交流群

太对了!!!!

感谢 lili83xu 您的帮助 !

使用道具

8
lili83xu 发表于 2008-2-13 23:21:00 |只看作者 |坛友微信交流群
不客气

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-27 08:27