全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3371 6
2007-11-23

想把以下格式
    code       date     price
1  000001  2007-10-16    15
2  000001  2007-10-17    16
3  000001  2007-10-18    14
4  000001  2007-10-19    15
5  000002  2007-10-15    19
6  000002  2007-10-16    17
7  000002  2007-10-17    19
8  000002  2007-10-18    12
9  000002  2007-10-19    19

变成以下格式
        date              000001       000002
1   2007-10-15              .              19
1   2007-10-16             15            17
1   2007-10-17             16            19
1   2007-10-18             14            12
1   2007-10-19             15            19

实际数据有很多,然后每个代码的数据条数不一样。
本来想把同一个代码的数据截出来,然后用merge根据date匹配合并,
但是merge好像只能赋给这个data步的数据集,我又不知道怎么在data步之间用循环。
所以现在很头大,请高人帮忙!!

谢谢!

二维码

扫码加我 拉你入群

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

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

全部回复
2007-11-23 10:08:00

用proc transpose 简单些, 用 array in data step 也可以做。

data a;
input code  $     date : yymmdd10.    price;
format date yymmdd10.;
cards;
  000001  2007-10-16    15
  000001  2007-10-17    16
  000001  2007-10-18    14
  000001  2007-10-19    15
  000002  2007-10-15    19
  000002  2007-10-16    17
  000002  2007-10-17    19
  000002  2007-10-18    12
  000002  2007-10-19    19
;
run;
proc sort data=a;
by date code;
run;
proc transpose data=a out=b prefix=code;
id code;
by date;
var price;
run;
proc print data=b;
run;

二维码

扫码加我 拉你入群

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

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

2007-11-23 15:11:00

行了,非常感谢!这个论坛真不错,以后就在这里混啦~

二维码

扫码加我 拉你入群

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

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

2007-11-23 22:34:00

接2楼的,我用array做!!大家批评指正!

proc sort data=a;
by date;
data a(drop=n price code);
set a;
by date;
if first.date then n=1;
else n+1;
if first.date=last.date then n=2;
array code00000(2);
retain code000001;
code00000(n)=price;
if last.date;
run;

二维码

扫码加我 拉你入群

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

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

2008-4-23 22:27:00
太感谢了,真在找这个程序
二维码

扫码加我 拉你入群

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

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

2008-4-24 13:46:00
4楼的哥么写的不错,虽然麻烦了点,顶下,有机会多多交流,
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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