全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
30205 8
2014-08-24
         在实际应用当中,我们需要对数据进行转置,把横向的数据想变成纵向的,把纵向的数据想变成横向的,但是当数据量过大时,我们使用proc transpose 速度就会很慢,很多朋友可能会灵活使用proc transpose  但是data步的转置用的不熟悉,在下不才,举个简单的例子帮助大家了解data步的转置;
     在此我就不过多介绍proc transpose的具体使用方法,只是在此简单的举个实例,让大家了解这两种实现数据转置的方法即可,希望各位大牛们批评指正,能够做些补充。



/*此数据集为学生各科考试的成绩记录,希望一个学生姓名后面几列跟的是学生的各个科目的成绩*/
data quan1;
input  name$ course $ score;
cards;
zhangsan a 59
zhangsan b 86
zhangsan c 75
zhangsan d 76
lisi a 78
lisi c 85
lisi e 79
run;

/*先对原始数据集进行排序*/
proc sort data=quan1;
by name;
run;
/*1、transpose转置实现 把纵向数据集按照需要 转换成横向数据集*/
proc transpose data=quan1   out=tt(drop=_name_);
by name;
id course;
var score;
run;


/*data步转置实现 :把纵向数据集按照需要 转换成横向数据集*/
data temp;
set quan1;
array amount(5)  a  b  c  d  e;
retain  a  b  c  d  e;
by name;
if first.name then
  do i=1 to 5;
   amount(i)=0;
  end;
      if course="a" then
  amount(1)=score;
else if course="b" then
  amount(2)=score;
else if course="c" then
  amount(3)=score;
else if course="d" then
  amount(4)=score;
else if course="e" then
  amount(5)=score;
if last.name;
drop i score course;
run;

/*2、transpose步转置实现 把横向数据集按照需要 转换成纵向数据集*/
proc transpose data=temp  out=dsd(rename=(_name_=course col1=score) );
by name;
run;


/*data步转置实现 把横向数据集按照需要 转换成纵向数据集*/
data temp1;
set temp;
array aa(5)  a  b  c  d  e;
retain  a  b  c  d  e;
by name;
do i=1 to 5;
if aa(i) ne 0 and aa(i) ne . then do;
if i=1 then course="a";
else if i=2 then course="b";
else if i=3 then course="c";
else if i=4 then course="d";
else if i=5 then course="e";
score=aa(i);
output;
end;
end;
drop i  a  b  c  d  e;
run;

这样横向纵向转置就可以初步实现,如果还想做些其他细节的修改,需要再添加一些选项即可
二维码

扫码加我 拉你入群

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

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

全部回复
2014-8-25 02:06:58
学习了,谢谢!
二维码

扫码加我 拉你入群

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

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

2014-8-25 23:19:30
tmdxyz 发表于 2014-8-25 02:06
学习了,谢谢!
谢谢,共同进步
二维码

扫码加我 拉你入群

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

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

2016-2-2 09:49:53
简单易用,非常好,学习了!
二维码

扫码加我 拉你入群

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

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

2018-3-29 20:14:03
好全面,谢谢!
二维码

扫码加我 拉你入群

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

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

2019-3-1 10:58:13
学到了http://www.cnblogs.com/immaculate/p/6166233.html

————————————
附件别管,错了
附件列表
451551408892_.pic.jpg

原图尺寸 73.63 KB

451551408892_.pic.jpg

二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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