SAS中文论坛

标题: 练手系列1: A到B的转换 [打印本页]

作者: shiyiming    时间: 2005-8-10 20:30
标题: 练手系列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
作者: shiyiming    时间: 2005-8-11 09:44
标题: 我来试试看
[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]
作者: shiyiming    时间: 2005-8-11 13:54
标题: @
[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]
作者: shiyiming    时间: 2005-8-11 14:03
标题: @
[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]
作者: shiyiming    时间: 2005-11-16 16:54
标题: 各位老大,这个又如何转?
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

多谢!
作者: shiyiming    时间: 2005-11-23 13:12
标题: 不过就是太长了,谁有更精简的?
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 -->
作者: shiyiming    时间: 2005-11-28 21:01
标题: 非常感谢
非常感谢。不好意思,不知道下面这样的合并该如何做?

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
作者: shiyiming    时间: 2005-11-29 14:56
标题: 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.
作者: shiyiming    时间: 2006-4-28 02:17
标题: Modify code for fixing warning
** Modify code for fixing warning **;

proc sql;
create table result as
select a.*,  ret  from a, b;
quit;
作者: shiyiming    时间: 2007-8-1 13:08
标题: 精简的
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;




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2