楼主: phoesun
29373 8

[实际应用] data步的转置 和proc transpose转置的灵活运用 [推广有奖]

  • 1关注
  • 0粉丝

大专生

86%

还不是VIP/贵宾

-

威望
0
论坛币
51 个
通用积分
0
学术水平
0 点
热心指数
5 点
信用等级
0 点
经验
1160 点
帖子
37
精华
0
在线时间
79 小时
注册时间
2013-4-12
最后登录
2016-6-30

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
         在实际应用当中,我们需要对数据进行转置,把横向的数据想变成纵向的,把纵向的数据想变成横向的,但是当数据量过大时,我们使用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;

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

扫码加我 拉你入群

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

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

关键词:Transpose data步 Trans pose Data 实际应用 朋友 记录 姓名

已有 1 人评分热心指数 收起 理由
tmdxyz + 5 热心帮助其他会员

总评分: 热心指数 + 5   查看全部评分

沙发
tmdxyz 发表于 2014-8-25 02:06:58 |只看作者 |坛友微信交流群
学习了,谢谢!

使用道具

藤椅
phoesun 发表于 2014-8-25 23:19:30 |只看作者 |坛友微信交流群
tmdxyz 发表于 2014-8-25 02:06
学习了,谢谢!
谢谢,共同进步

使用道具

板凳
zorro999 发表于 2016-2-2 09:49:53 |只看作者 |坛友微信交流群
简单易用,非常好,学习了!

使用道具

报纸
Muriz 发表于 2018-3-29 20:14:03 |只看作者 |坛友微信交流群
好全面,谢谢!

使用道具

地板
yancongthu 学生认证  发表于 2019-3-1 10:58:13 |只看作者 |坛友微信交流群
学到了http://www.cnblogs.com/immaculate/p/6166233.html

————————————
附件别管,错了

451551408892_.pic.jpg (73.63 KB)

451551408892_.pic.jpg

使用道具

7
17766081521 发表于 2019-10-18 15:54:10 |只看作者 |坛友微信交流群
写homework正好发愁如何用data步转置,按照大神的指点顺利转置成功啦~~~非常感谢[victory][victory]

使用道具

8
xieguahu 发表于 2019-10-22 00:31:35 |只看作者 |坛友微信交流群
谢谢分享.

使用道具

9
依日竹 发表于 2024-10-9 11:12:30 |只看作者 |坛友微信交流群
stata中怎么没有这么方便的命令

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-11-6 08:15