楼主: priss111
2722 16

请问如何按需转置数据?谢谢! [推广有奖]

  • 0关注
  • 5粉丝

副教授

15%

还不是VIP/贵宾

-

威望
0
论坛币
153 个
通用积分
47.5396
学术水平
11 点
热心指数
14 点
信用等级
10 点
经验
14938 点
帖子
473
精华
0
在线时间
805 小时
注册时间
2008-3-30
最后登录
2024-4-12

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
原始数据集exp5_1;
最终生成数据集new的格式为:

gender  enzyme subj y1  y2 y3 y4 y5 y6
1           1             1   19  22 28 16 26 22

目前只能生成数据集y(只有y1-y3),
请问如何通过transpose生成new数据集?


data exp5_1;
        do gender = 1 to 2;
                do subj = 1 to 8;
                        do enzyme = 1 to 2;
                        do lever = 1 to 3;
                        input y @@;
                        output;
                        end;
                        end;
                end;
        end;
cards;
19 22 28 16 26 22
11 19 30 12 18 28
20 24 24 24 22 29
21 25 25 15 10 26
18 24 29 19 26 28
17 23 28 15 23 22
20 23 23 26 21 28
14 20 29 25 29 29
16 20 24 30 34 36
26 26 26 24 30 32
22 27 23 33 36 45
16 18 29 27 26 34
19 21 20 22 22 21
20 25 25 29 29 33
21 22 23 27 26 35
17 20 22 23 26 28
;
run;

proc sort data=exp5_1;
        by GENDER enzyme subj;
        run;
proc transpose data=exp5_1 out=y(rename=(_1 = y1 _2 =y2 _3=y3 _4=y4 _5=y5 _6=y6));  *lever只有3个水平;
        by GENDER enzyme subj;
        id lever;            
        run;




二维码

扫码加我 拉你入群

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

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

关键词:Transpose Gender output rename Lever 如何

沙发
FB_FLORA 发表于 2014-7-2 13:23:07 |只看作者 |坛友微信交流群
因为lever是3个的(1,2,3),每个 GENDER enzyme subj也只是对应着3个records

使用道具

藤椅
priss111 发表于 2014-7-2 13:59:37 |只看作者 |坛友微信交流群
FB_FLORA 发表于 2014-7-2 13:23
因为lever是3个的(1,2,3),每个 GENDER enzyme subj也只是对应着3个records
恩。

那如何生成数据集new的格式?

使用道具

板凳
823954913 发表于 2014-7-2 14:53:35 |只看作者 |坛友微信交流群
data exp5_1;
        do gender = 1 to 2;
                do subj = 1 to 8;
                        do enzyme = 1 to 2;
                        do lever = 1 to 6;
                        input y @@;
                        output;
                        end;
                        end;
                end;
        end;
cards;
19 22 28 16 26 22
11 19 30 12 18 28
20 24 24 24 22 29
21 25 25 15 10 26
18 24 29 19 26 28
17 23 28 15 23 22
20 23 23 26 21 28
14 20 29 25 29 29
16 20 24 30 34 36
26 26 26 24 30 32
22 27 23 33 36 45
16 18 29 27 26 34
19 21 20 22 22 21
20 25 25 29 29 33
21 22 23 27 26 35
17 20 22 23 26 28
;
run;


proc sort data=exp5_1;
        by GENDER enzyme subj;
        run;
proc transpose data=exp5_1 out=y(rename=(_1 = y1 _2 =y2 _3=y3 _4=y4 _5=y5 _6=y6));  *lever只有3个水平;
        by GENDER enzyme subj;
       id lever;   
   run;

使用道具

报纸
priss111 发表于 2014-7-2 15:17:19 |只看作者 |坛友微信交流群
823954913 发表于 2014-7-2 14:53
data exp5_1;
        do gender = 1 to 2;
                do subj = 1 to 8;
您这new数据集中的gender取值只有1,实际gender取值有2个即1 & 2.
再说exp5_1数据集中的lever是有实际意义的,只有3个水平,
把lever改成6个水平是不对的。

继续求代码?

说明:
new数据集中:
gender的取值为1、2
enzyme的取值为1、2
subj的取值为1、2、3、4、5、6、7、8.

使用道具

地板
pobel 在职认证  发表于 2014-7-2 15:44:12 |只看作者 |坛友微信交流群
priss111 发表于 2014-7-2 15:17
您这new数据集中的gender取值只有1,实际gender取值有2个即1 & 2.
再说exp5_1数据集中的lever是有实际意 ...
既然lever只有3个水平,那楼主想要的数据集中的y4, y5, y6代表什么?
楼主给出的y4, y5, y6的值在exp5_1里应该是属于enzyme=2的。

gender  enzyme subj y1  y2 y3 y4 y5 y6
1          1             1   19  22 28 16 26 22

使用道具

7
priss111 发表于 2014-7-2 15:52:59 |只看作者 |坛友微信交流群
pobel 发表于 2014-7-2 15:44
既然lever只有3个水平,那楼主想要的数据集中的y4, y5, y6代表什么?
楼主给出的y4, y5, y6的值在exp5_1 ...
是.
在new中y4-y6的意义与exp5_1中同.

使用道具

8
pobel 在职认证  发表于 2014-7-2 16:09:04 |只看作者 |坛友微信交流群
priss111 发表于 2014-7-2 15:52
是.
在new中y4-y6的意义与exp5_1中同.
还是理解不了楼主的意图。

您是想把
gender    subj    enzyme    lever     y
   1        1        1        1      19
   1        1        1        2      22
   1        1        1        3      28
   1        1        2        1      16
   1        1        2        2      26
   1        1        2        3      22

转置成:
gender  enzyme subj y1  y2 y3 y4 y5 y6
1           1             1   19  22 28 16 26 22

那enzyme为什么在转置后就都是1了?

使用道具

9
priss111 发表于 2014-7-2 16:25:43 |只看作者 |坛友微信交流群
pobel 发表于 2014-7-2 16:09
还是理解不了楼主的意图。

您是想把
对exp5_1转置,
如果中间没有其他语句控制enzyme、lever的取值,
那么得到的enzyme、lever的取值只有1个值.

意图:
将enzyme*lever交叉的Y值分成6个取值.

或者说:
将y值由纵向转置成横向,
同时gender变量的取值与exp5_1中同.
最好enzyme、subject的取值也与exp5_1中同.

使用道具

10
pobel 在职认证  发表于 2014-7-2 16:43:23 |只看作者 |坛友微信交流群
priss111 发表于 2014-7-2 16:25
对exp5_1转置,
如果中间没有其他语句控制enzyme、lever的取值,
那么得到的enzyme、lever的取值只有1个 ...
1.
楼主需要真正理解TRANSPOSE是如何工作的,如果用“by GENDER enzyme subj;”,由于数据集中每个GENDER+enzyme+sub的组合只有3条记录,所以转置后是不能得到6个新变量的。

2.
如果意图是对enzyme*level交叉的y值进行转置,那结果enzyme就不能做为BY语句中的变量。
而且转置前enzyme的取值可以为1或2;转置后只有一行(enzyme只能取一个值),何来“enzyme也与exp5_1同”之说?

3.
楼主可以看一下是不是这个意思:
data exp5_1;
    set exp5_1;
        enz_lev=cats(enzyme,lever);
run;
proc sort data=exp5_1;
        by GENDER subj;
run;
proc transpose data=exp5_1 out=y(rename=(_11 = y1 _12 =y2 _13=y3 _21=y4 _22=y5 _23=y6) drop=_name_);  
        by GENDER subj;
                var y;
        id enz_lev;            
        run;

使用道具

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

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

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

GMT+8, 2024-4-28 00:43