SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 2482|回复: 9
打印 上一主题 下一主题

练手系列1: A到B的转换

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2005-8-10 20:30:03 | 只看该作者

练手系列1: A到B的转换

A:

Obs ID TIME SBPS
1 1 1 123
2 1 2 126
3 1 3 128
4 2 1 112
5 2 2 110
6 2 3 115


B:

Obs ID SBP1 SBP2 SBP3
1 1 123 126 128
2 2 112 110 115
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2005-8-11 09:44:00 | 只看该作者

我来试试看

[code:860ad]data a;
input id time sbps;
datalines;
1 1 123
1 2 126
1 3 128
2 1 112
2 2 110
2 3 115
;
run;

proc transpose data=a out=b(drop=_NAME_) prefix=sbps;
by id;
var sbps;
run;[/code:860ad]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2005-8-11 13:54:43 | 只看该作者

@

[code:64191]data b;
set a;
by id;
retain sbp1-sbp3;
array sbp[3];
if first.id then i=1;
sbp[i]=sbps;
i+1;
if last.id then output;
drop sbps time i;
run;[/code:64191]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2005-8-11 14:03:14 | 只看该作者

@

[code:f30f6]data b;
retain id;
array u[*] sbp1-sbp3;
do i=1 to dim(u);
set a ;
u[i]=sbps;
end;
drop sbps time i;
run;[/code:f30f6]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2005-11-16 16:54:18 | 只看该作者

各位老大,这个又如何转?

A:

date    601  602  603
2001    2.1   1.2   3.5
2002    2.2   1.3   3.6
2003    2.3   1.4   3.7

B:

code date prc
601  2001 2.1
601  2002 2.2
601  2003 2.3
602  2001 1.2
602  2002 1.3
602  2003 1.4
603  2001 3.5
603  2002 3.5
603  2003 3.6

多谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2005-11-23 13:12:26 | 只看该作者

不过就是太长了,谁有更精简的?

data one;
label x1='601' x2='602' x3='603';
input date x1-x3  @@;
cards;
2001 2.1 1.2 3.5
2002 2.2 1.3 3.6
2003 2.3 1.4 3.7
;
proc transpose out=two;
by date;
var x1-x3;
proc sort;
by _Name_;
proc print;
run;
data three (drop= _name_);
set two;
rename _label_=code col1=pro;
proc print;
run; <!-- s:P --><img src="{SMILIES_PATH}/icon_razz.gif" alt=":P" title="Razz" /><!-- s:P -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2005-11-28 21:01:50 | 只看该作者

非常感谢

非常感谢。不好意思,不知道下面这样的合并该如何做?

code1 code2
  1     2
  1     3
  1     4

code1 ret
  1    0.5
  1    0.6
  1    0.7

code1 code2 ret
  1     2    0.5
  1     2    0.6
  1     2    0.7
  1     3    0.5
  1     3    0.6
  1     3    0.7  
  1     4    0.5
  1     4    0.6
  1     4    0.7
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2005-11-29 14:56:53 | 只看该作者

proc sql might work

data a; input
code1 code2;
datalines;
1 2
1 3
1 4
; run;
data b; input

code1 ret;
datalines;
1 0.5
1 0.6
1 0.7
;
run;

proc sql;
create table result as
select * from a, b;
quit;

This works but I got a warning in the log:
WARNING: Variable code1 already exists on file WORK.RESULT.
Anybody knows why? I am not quite familar with proc sql.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2006-4-28 02:17:20 | 只看该作者

Modify code for fixing warning

** Modify code for fixing warning **;

proc sql;
create table result as
select a.*,  ret  from a, b;
quit;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
10#
 楼主| 发表于 2007-8-1 13:08:33 | 只看该作者

精简的

data a;
label x1='601' x2='602' x3='603';
input date x1-x3 @@;
cards;
2001 2.1 1.2 3.5
2002 2.2 1.3 3.6
2003 2.3 1.4 3.7
;
run;

proc transpose data = a out = stat (rename = (_label_ = code col1 = prc) drop = _name_); by date; run;
proc sort; by code; run;
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-4 05:19 , Processed in 0.084328 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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