全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1156 4
2013-03-24
悬赏 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 ...
二维码

扫码加我 拉你入群

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

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

全部回复
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;
二维码

扫码加我 拉你入群

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

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

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;
二维码

扫码加我 拉你入群

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

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

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?能不能不用?
二维码

扫码加我 拉你入群

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

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

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.   
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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