楼主: dxystata
1341 8

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

版主

已卖:302份资源

大师

37%

还不是VIP/贵宾

-

TA的文库  其他...

Software

中英文Ebook

R学习

威望
2
论坛币
183395 个
通用积分
15333.1475
学术水平
208 点
热心指数
271 点
信用等级
174 点
经验
298627 点
帖子
5586
精华
1
在线时间
13632 小时
注册时间
2006-6-21
最后登录
2025-12-22

初级学术勋章 初级热心勋章 中级热心勋章 初级信用勋章

楼主
dxystata 发表于 2019-5-14 14:13:30 |AI写论文
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

沙发
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: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后的变量顺序错了!

7
luekemia 发表于 2019-5-15 11:20:09
直接给代码吧:

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   查看全部评分

8
tianwk 发表于 2019-5-15 14:11:46
thanks for sharing

9
8112mmw 发表于 2019-5-17 08:45:07
此问题,还没有解决?

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

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