楼主: hxmlcy
1155 4

[问答] 请教一个问题 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

7%

还不是VIP/贵宾

-

威望
0
论坛币
485 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
32620 点
帖子
29
精华
0
在线时间
219 小时
注册时间
2012-10-20
最后登录
2017-10-10

楼主
hxmlcy 发表于 2013-3-24 17:37:40 |AI写论文
50论坛币
原数据:
StkcdTrddtScidReptdtRankShnmShnumShrtShntur
0000012004-12-30

1

2004-06-30

1

深圳市投资管理公司

1.38E+08

7.08

0000012004-12-30

2

2004-12-31

1

Newbridge Asia AIV Ⅲ,L.P.

3.48E+08

17.89

外资股
0000022003-08-27

1

2002-12-31

1

中国华润总公司

78075749

12.37

0000022003-08-27

2

2003-06-30

1

华润股份有限公司

1.56E+08

11.29










想得到的数据:

StkcdTrddtScidReptdtRank1Shnm1Shnum1Shrt1Shntur1ScidReptdt2Rank2Shnm2Shnum2Shrt2Shntur2
0000012004-12-30

1

2004-06-30

1

深圳市投资管理公司

1.38E+08

7.08

2

2004-12-31

1

Newbridge Asia AIV Ⅲ,L.P.

3.48E+08

17.89

外资股
0000022003-08-27

1

2002-12-31

1

中国华润总公司

78075749

12.4

2

2003-06-30

1

华润股份有限公司

1.56E+08

11.29

即:
将Stkcd从两行变为一行合并数据(表格比较长,后面可能看不见变量有Reptdt2 Rank2 Shnm2 Shnum2 Shrt2 Shntur2 ),不知道是否可以实现?谢谢

最佳答案

yongyitian 查看完整内容

data test; infile datalines missover; input Stkcd $ trddt yymmdd10. Scid Reptdt yymmdd10. Rank Shnm $ Shnum Shrt Shntur $; format trddt Reptdt yymmdd10.; datalines; 000001 2004-12-30 1 2004-06-30 1 ShenTou 1.38E+08 7.08 000001 2004-12-30 2 2004-12-31 1 AsiaAIV 3.48E+08 17.89 WaiZi 000002 2003-08-27 1 2002-12-31 1 ZhongHua 78075749 12.37 000002 2003-08-27 2 2003-06-30 1 HuanYun 1 ...
关键词:股份有限公司 bridge stkcd Ridge Ranks 有限公司 管理公司 深圳市 总公司 华润

沙发
yongyitian 发表于 2013-3-24 17:37:41
data test;
   infile datalines missover;
   input Stkcd $ trddt yymmdd10. Scid Reptdt yymmdd10. Rank Shnm $ Shnum Shrt Shntur $;
   format trddt Reptdt yymmdd10.;
datalines;
000001 2004-12-30 1 2004-06-30 1 ShenTou 1.38E+08 7.08
000001 2004-12-30 2 2004-12-31 1 AsiaAIV   3.48E+08 17.89 WaiZi
000002 2003-08-27 1 2002-12-31 1 ZhongHua 78075749 12.37
000002 2003-08-27 2 2003-06-30 1 HuanYun 1.56E+08 11.29
;
run;
proc print data=test; run;

data want;
   merge test (where=(Scid = 1)
                     rename = (
                                   Rank = Rank1
                                   Shnm = Shnm1
                                   Shnum = Shnum1
                                   Shrt = Shrt1
                                   Shntur = Shntur1))
             test (where=(Scid2 = 2)
              rename = (
                             Scid = Scid2
                             Reptdt = Reptdt2
                             Rank = Rank2
                             Shnm = Shnm2
                             Shnum = Shnum2
                             Shrt = Shrt2
                             Shntur = Shntur2));
        by Stkcd;
run;

proc print data=want; run;

藤椅
farmman60 发表于 2013-3-24 22:12:09
data have;
input Stkcd        Trddt: yymmdd10.        Scid        Reptdt: yymmdd10.        Rank        Shnm $        Shnum        Shrt;
format Trddt yymmdd10. Reptdt yymmdd10.;
cards;
000001        2004-12-30  1 2004-06-30        1 ABC        1.38E+08 7.08
000001        2004-12-30  2 2004-12-31  1  DEF   3.48E+08 17.89
000002        2003-08-27 1  2002-12-31  1  XYZ   78075749 12.37
000002  2003-08-27         2 2003-06-30 1  OPQ    1.56E+08 11.29
;
proc print;
run;


proc sql;
create table want as
select a.*, b.* from (select * from have where scid=1) a, (select Stkcd,Scid as Scid1,Trddt as Trdd1,Reptdt as Reptdt1,Rank as Rank1,
Shnm as Shnm1,Shnum as Shnum1, Shnum as Shnum1 from have where Scid=2) b
where a.Stkcd=b.Stkcd;
quit;

板凳
hxmlcy 发表于 2013-3-25 10:35:11
farmman60 发表于 2013-3-24 22:12
data have;
input Stkcd        Trddt: yymmdd10.        Scid        Reptdt: yymmdd10.        Rank        Shnm $        Shnum        Shrt;
format Trdd ...
只能用sql?能不能不用?

报纸
farmman60 发表于 2013-3-25 10:49:02
Sure. First split data set into two data sets, one data set has Sciid=1, other Scid=2, then rename vars names in one of data sets, merge two data sets with common var name Stkcd.   

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-26 03:41