全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
21493 9
2009-03-23

请教高手,如何将纵向排列的各组数据,变为横向排列的(比如按照变量code依次将观测值横向排列)?

另外,由于各个股票所对应的观测值个数不同,比如0001对应3个观测,0002对应2个观测,0003对应1个观测,在排列时如何将这些观测值以最后一条观测值对齐?恳请指点,谢谢!

比如,原数据集为

code return dummy year

0001  0.35      0       2004

0001  0.86      1       2005

0001  1.92      0       2006

0002  2.34      0       2005

0002  0.19      1       2006

0004 3.73 1 2006

目标数据集:

code return dummy year   code return dummy year   code return dummy year

0001   0.35      0    2004

0001   0.86      1    2005   0002  2.34     0       2005

0001   1.92      0    2006   0002  0.19     1       2006    0004 3.73      1      2006

[此贴子已经被作者于2009-3-23 19:44:06编辑过]

二维码

扫码加我 拉你入群

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

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

全部回复
2009-3-23 20:53:00

首先将原数据集拷入EXCEL,然后选择该数据集所在的区域,按右键选择复制,然后选择另外一个工作表,按按右键选择“选择性粘贴”,选择转置即可。

二维码

扫码加我 拉你入群

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

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

2009-3-23 21:05:00
这哪儿是简单转置事儿啊?这也不是把纵向转为横向嘛,我看只有手动了,呵呵
二维码

扫码加我 拉你入群

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

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

2009-3-24 01:31:00

首先仔细看一下你的数据,在最后的结果里你不需要三个“year”,一个就够了;此外,你不能有两个以上相同的变量名,所以,你最后会有code1,code2, code3, 等。

data data0;
 input code $ return dummy year;
 datalines; 
0001  0.35      0       2004
0001  0.86      1       2005
0001  1.92      0       2006
0002  2.34      0       2005
0002  0.19      1       2006
0004 3.73 1 2006
;
run;

proc sort data = data0;
 by code year;
run;

proc sql;
 create table code_set as
 select distinct code
 from data0
 order by code;
run;

data _null_;
  set code_set NOBS=count;
  if _n_=1 then call symput("num_codes",left(put(count,8.)));
run;

%macro a_macro;

 %do i=1 %to &num_codes;

  data _null_;
   set code_set;
   if _n_=&i then call symput("code",trim(left(code)));
  run;

  data temp;
   set data0;
   if code="&code";
   
  run;

  %if &i=1 %then %do;

   data all;
    set temp;
    keep year;
   run;

  %end;

  data temp;
   set temp;
   rename code=code&i;
   rename dummy=dummy&i;
   rename return =return&i;
  run;

  data all;
   merge all temp;
   by year;
  run;

 %end;

%mend a_macro;

%a_macro;

quit;

二维码

扫码加我 拉你入群

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

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

2009-3-24 12:07:00

阿弥陀佛!看LZ问题心切,teve10解答辛苦,真是太感动!

其实,这只不过是一个 矩阵的转置问题,在 Matlab 环境中一个命令即可搞定,示例如下:启动matlab,在命令窗口键入:

x=[0001  0.35      0       2004

   0001  0.86      1       2005

   0001  1.92      0       2006

   0002  2.34      0       2005

   0002  0.19      1       2006];

y=x'

(以上请LZ参考,谢谢!)

二维码

扫码加我 拉你入群

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

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

2010-8-30 19:02:55
不好意思,小弟学识很浅,请问上面4楼steve写的:
data _null_;
  set code_set NOBS=count;
  if _n_=1 then call symput("num_codes",left(put(count,8.)));
run;

其中的: (count,8)是什么意思?这个数字更改有什么影响呢?
请指教,谢谢!

而且好像这一段删掉也没有什么关系诶,好像。。
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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