楼主: dxystata
180 8

[问答] 数据如何转置 [推广有奖]

版主

学术权威

91%

还不是VIP/贵宾

-

TA的文库  其他...

Software

中英文Ebook

R学习

威望
2
论坛币
160361 个
通用积分
13269.7454
学术水平
198 点
热心指数
252 点
信用等级
163 点
经验
218148 点
帖子
3923
精华
1
在线时间
10082 小时
注册时间
2006-6-21
最后登录
2019-9-17

初级学术勋章 初级热心勋章

dxystata 发表于 2019-5-14 14:13:30 |显示全部楼层
15论坛币
  1. data aaa;
  2. input id visit$8. x;
  3. cards;
  4. 1 5        1
  5. 1 6        2
  6. 1 8        3
  7. 1 14.01    3
  8. 1 14.02    3
  9. 2 5        1
  10. 2 6        2
  11. 2 19.01    2
  12. 3 5        2
  13. 3 6        3
  14. 3 14.02    3
  15. ;
  16. run;
复制代码
visit取值是字符型,希望得到的数据为:
id  visit5 visit6 visit8 visit1401 visit1402 visit1901
1     1       2       3         3           3
2     1       2                                             2
3     2       3                              3


最佳答案

8112mmw 查看完整内容

前面进行了排序操作,可以不用排序,直接转置的。
关键词:Visit Input cards visi Data
stata SPSS
8112mmw 发表于 2019-5-14 14:13:31 |显示全部楼层
dxystata 发表于 2019-5-15 08:51
transpose后的变量顺序错了!
前面进行了排序操作,可以不用排序,直接转置的。
回复

使用道具 举报

8112mmw 发表于 2019-5-15 08:20:02 |显示全部楼层
可以用transpose做
回复

使用道具 举报

8112mmw 发表于 2019-5-15 08:29:27 |显示全部楼层
本帖最后由 8112mmw 于 2019-5-15 08:45 编辑
8112mmw 发表于 2019-5-15 08:20
可以用transpose做
要结合id等才行
回复

使用道具 举报

8112mmw 发表于 2019-5-15 08:34:12 |显示全部楼层
proc sort data=aaa;
by id visit;
run;
proc transpose data=aaa out=bbb;
by id ;
id visit;
run;
proc print data=bbb;
run;
回复

使用道具 举报

dxystata 发表于 2019-5-15 08:51:53 |显示全部楼层
8112mmw 发表于 2019-5-15 08:34
proc sort data=aaa;
by id visit;
run;
transpose后的变量顺序错了!
回复

使用道具 举报

luekemia 发表于 2019-5-15 11:20:09 |显示全部楼层
本帖最后由 luekemia 于 2019-5-15 11:23 编辑

直接给代码吧:

data aaa;

input id visit$8. x;

cards;

1 5        1

1 6        2

1 8        3

1 14.01    3

1 14.02    3

2 5        1

2 6        2

2 19.01    2

3 5        2

3 6        3

3 14.02    3

;

run;



data aaa;set aaa;

c=length(visit);

run;


proc sort data = aaa;

by id c visit;

run;


proc sql;

create table dis_vname as

select distinct c,compress(visit) as vname from aaa;

quit;


proc sort data = dis_vname;

by c vname;

run;


data dis_vname;set dis_vname;

vname = compress(vname,'.');

format call $1000.;

call = "retain V"||compress(vname)||";if first.id then V"||compress(vname)||"=.;if compress(visit,'.')='"||compress(vname)||"' then V"||compress(vname)||"=x;";

call symput('c'||compress(_n_),call);

run;



proc sql noprint;

select count(*) into :nc from dis_vname

;quit;


%macro cc;

%do i = 1 %to &nc.;

&&c&i..;;

%end;

%mend;



data bbb;set aaa;

by id;

%cc;

if last.id;

drop c visit x;

run;


已有 1 人评分经验 收起 理由
eijuhz + 20 精彩帖子

总评分: 经验 + 20   查看全部评分

回复

使用道具 举报

tianwk 发表于 2019-5-15 14:11:46 |显示全部楼层
thanks for sharing
回复

使用道具 举报

8112mmw 发表于 2019-5-17 08:45:07 |显示全部楼层
此问题,还没有解决?
回复

使用道具 举报

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

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

GMT+8, 2019-9-18 07:39