楼主: priss111
3063 16

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

11
priss111 发表于 2014-7-2 16:54:22
pobel 发表于 2014-7-2 16:43
1.
楼主需要真正理解TRANSPOSE是如何工作的,如果用“by GENDER enzyme subj;”,由于数据集中每个GENDE ...
tks.
不是.

最后生成共16个观测.

12
仙人来也 发表于 2014-7-2 18:19:33
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;
data a;
do i=1 to 6;
set  exp5_1;
array z(6) z1-z6;
z(i)=y;
end;
keep   gender subj enzyme z1-z6;
run;

https://bbs.pinggu.org/forum.php?mod=viewthread&tid=3103005&page=1#pid25448503

13
priss111 发表于 2014-7-2 21:45:46
仙人来也 发表于 2014-7-2 18:19
data exp5_1;
        do gender = 1 to 2;
                do subj = 1 to 8;
en.
keep gender subj z1-z6;
这样确实可以生成最终的new.

但是用transpose过程能否生成new数据集?

另外:
用array的话,
我想能否用enzyme、lever的取值来控制y1-y6的取值?

比如:
data y;
        array yy(6) yy1-yy6;
        do enzyme = 1 to 2;
                        do lever = 1 to 3;
                        set exp5_1;
                        by gender subj;
                        yy(enzyme*lever) = y;  *enzyme*lever=1、2、3、2、4、6,这导致第个值被第4个取代,同时没有第5个值,我不知道用原始库中的enzyme、lever的情况下如何控制yy的下标?;
                        end;
                        end;
                        run;

14
仙人来也 发表于 2014-7-2 23:21:13
priss111 发表于 2014-7-2 21:45
en.
keep gender subj z1-z6;
这样确实可以生成最终的new.
可以通过transpose过程生成new数据集~但是transpose过程后要对数据集进行后续处理;既然enzyme*lever相乘取不到5,可以换别的控制下表方法~~比如 yy(3*(enzyme-1)+lever) = y

15
priss111 发表于 2014-7-3 09:03:36
仙人来也 发表于 2014-7-2 23:21
可以通过transpose过程生成new数据集~但是transpose过程后要对数据集进行后续处理;既然enzyme*lever相乘 ...
tks so much!!!
yy(3*(enzyme-1)+lever) = y.


继续:那用transpose如何生成new?

16
仙人来也 发表于 2014-7-3 12:01:55
priss111 发表于 2014-7-3 09:03
tks so much!!!
yy(3*(enzyme-1)+lever) = y.
  1. data exp5_1;
  2.         do gender = 1 to 2;
  3.                 do subj = 1 to 8;
  4.                         do enzyme = 1 to 2;
  5.                         do lever = 1 to 3;
  6.                         input y @@;
  7.                         output;
  8.                         end;
  9.                         end;
  10.                 end;
  11.         end;
  12. cards;
  13. 19 22 28 16 26 22
  14. 11 19 30 12 18 28
  15. 20 24 24 24 22 29
  16. 21 25 25 15 10 26
  17. 18 24 29 19 26 28
  18. 17 23 28 15 23 22
  19. 20 23 23 26 21 28
  20. 14 20 29 25 29 29
  21. 16 20 24 30 34 36
  22. 26 26 26 24 30 32
  23. 22 27 23 33 36 45
  24. 16 18 29 27 26 34
  25. 19 21 20 22 22 21
  26. 20 25 25 29 29 33
  27. 21 22 23 27 26 35
  28. 17 20 22 23 26 28
  29. ;
  30. run;
  31. proc transpose data=exp5_1 out=y prefix=y;
  32.         by GENDER  subj enzyme;
  33.         id lever;            
  34.         run;
  35. data a ;
  36. merge y(in=a) y (in=b firstobs=2 rename=(y1=y4 y2=y5 y3=y6));
  37. if enzyme=1 then delete;
  38. run;
  39. data new;
  40. set a end=last;
  41. if last=1 then delete;
  42. run;
复制代码

17
priss111 发表于 2014-7-3 14:07:48
仙人来也 发表于 2014-7-3 12:01
en.

看来当控制变量超过3个(gender、enzyme、lever、subj)的时候,
用transpose过程一步生成数据new,
是实现不了了.

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 13:53