SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 2767|回复: 5
打印 上一主题 下一主题

如何把多行变量值改写成一行?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2013-5-2 05:43:56 | 只看该作者

如何把多行变量值改写成一行?

data a;
input m_id $ x y;
cards;
a1 1 12
a1 15 20
a1 22 28
;
run;

问题1:想把data a 改成单行 i.e.:
data b;
m_id x1 y1 x2  y2 x3 y3;
a1    1   12 15 20 22 28

问题2:如果data a 有上百行数据,又该如何?
data a;
input m_id $ x y;
cards;
a1 1 12
a1 15 20
a1 22 28
a1 30 36
. . .
;
run;

thx!!!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2013-5-2 11:08:02 | 只看该作者

Re: 如何把多行变量值改写成一行?

参考http://saslist.net/archives/255。里面详细讲述关于转置的方法与代码。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2013-5-2 23:21:13 | 只看该作者

Re: 如何把多行变量值改写成一行?

it is different from the 转置的方法与代码 in this website, actually my case is a little more complicated. anyway, any comments/suggestion is welcome,.
thanks again.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2013-5-3 13:08:37 | 只看该作者

Re: 如何把多行变量值改写成一行?

用Merge
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2013-5-10 00:08:43 | 只看该作者

Re: 如何把多行变量值改写成一行?

using data-step can refer the following code. Jingju

[code:cfkjdgrz]proc sql noprint;
select max(c) into :maxn from (select count(*) as c from sashelp.class(keep =age) group by age) ;

%macro makevars;        %do i =1 %to &maxn;                height&i weight&i        %end;        %mend;

data have;
        set sashelp.class; by age notsorted;
        array t[&maxn, 2] %makevars(%eval(2*&maxn)*.);
        n ++1;
        t[n, 1] =height;        t[n, 2] =weight;
        if last.age then do;
                output;                call missing(of t[*] n);
        end;
        keep age %makevars;
run;[/code:cfkjdgrz]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2013-6-27 20:42:35 | 只看该作者

Re: 如何把多行变量值改写成一行?

[code:21dz4emw]proc transpose data=a(drop=y) out=b1 prefix=x;
var x ;
by m_id;
run;

proc transpose data=a(drop=x) out=b2 prefix=y;
var y ;
by m_id;
run;

data b;
merge b1 b2;
by m_id;
drop _name_;
run;[/code:21dz4emw]
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-5-2 18:36 , Processed in 0.093345 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表