楼主: 孤灯渡漠
2904 10

关于转置的问题 [推广有奖]

  • 0关注
  • 0粉丝

本科生

52%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
993 点
帖子
82
精华
0
在线时间
61 小时
注册时间
2009-11-24
最后登录
2021-8-5

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
数据大概是这样滴

ID  r1c1 r1c2 r1c3  r2c1 r2c2 r2c3.....r170c1 r170c2 r170c3
101  25  22  36    95   86    77........      52       53         55

转后:
ID  row  c1   c2   c3
101  1    25   22   36
101  2    95   86   77
...
101 170 52  53  55

请问用transpose能一次搞定吗???
二维码

扫码加我 拉你入群

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

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

关键词:Transpose Trans pose RAN ans

本帖被以下文库推荐

沙发
孤灯渡漠 发表于 2014-7-3 15:45:47 |只看作者 |坛友微信交流群
我现在想到的办法是把数据分成c1、c2、c3三部分,分别转置再拼在一起

不知有没有更好的方法

使用道具

藤椅
小斜 学生认证  发表于 2014-7-3 15:48:22 |只看作者 |坛友微信交流群
在excel中,复制——黏贴——选择性黏贴——转置,试试看能不能达到目的。

使用道具

板凳
wwang111 发表于 2014-7-3 16:07:33 |只看作者 |坛友微信交流群
我能想到的是用两步transpose, 一步搞定我没想到:

data test;
input ID $ r1c1 r1c2 r1c3  r2c1 r2c2 r2c3 r3c1 r3c2 r3c3;
cards;
101  25  22  36  95  86  77  52  53  55 66 77 88
;

proc transpose data=test out=trans1;
by notsorted id;
var r:;
run;

data trans2;
set trans1;
row=substr(_name_,2,index(upcase(_name_),'C')-2);
drop _name_;
run;

proc transpose data=trans2 out=wanted(drop=_name_) prefix=c;
by notsorted id row;
var col1;
run;

使用道具

报纸
pobel 在职认证  发表于 2014-7-3 16:17:58 |只看作者 |坛友微信交流群
data _null_;
    call execute('data wanted; set test;');
        do i=1 to 170;          
           call execute(cats('row=',i,';'));
           call execute(cats('c1=r',i,'c1',';'));
           call execute(cats('c2=r',i,'c2',';'));
           call execute(cats('c3=r',i,'c3',';'));
           call execute('output;');
        end;
        call execute('keep id row c1 c2 c3; run;');
run;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Tigflanker + 3 + 3 + 3 观点有启发

总评分: 学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

使用道具

地板
孤灯渡漠 发表于 2014-7-3 16:52:17 |只看作者 |坛友微信交流群
小斜 发表于 2014-7-3 15:48
在excel中,复制——黏贴——选择性黏贴——转置,试试看能不能达到目的。
这个....... excel 就算了

就是为了复用才用sas的

使用道具

7
孤灯渡漠 发表于 2014-7-3 16:52:56 |只看作者 |坛友微信交流群
wwang111 发表于 2014-7-3 16:07
我能想到的是用两步transpose, 一步搞定我没想到:

data test;
哥,你真强悍

每次我发疑问,你都能第一时间解决,膜拜

使用道具

8
孤灯渡漠 发表于 2014-7-3 17:04:31 |只看作者 |坛友微信交流群
wwang111 发表于 2014-7-3 16:07
我能想到的是用两步transpose, 一步搞定我没想到:

data test;
为什么一般要加上notsorted呢??

使用道具

9
wwang111 发表于 2014-7-3 17:15:47 |只看作者 |坛友微信交流群
孤灯渡漠 发表于 2014-7-3 17:04
为什么一般要加上notsorted呢??
也不一定是一般要加,如果数据集过大,加上这个可以节省sort的时间,但是如果数据集里的值不规律,比如id的值不是按顺序下来,会对transpose产生影响的,就得sort了

使用道具

10
仙人来也 发表于 2014-7-4 18:32:21 |只看作者 |坛友微信交流群
可以尝试通过二维数组来转置:
data new;
set old(drop=id);
array rc(170,3) _numeric_;
array c(3)c1-c3;
do i=1 to 170;
do j=1 to 3;
c(j)=rc(i,j);
end;
output;
end;
keep c1-c3;
run;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Tigflanker + 3 + 3 + 3 观点有启发

总评分: 学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

使用道具

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

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

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

GMT+8, 2024-4-24 00:19