SAS中文论坛

标题: 求助:数据变形 [打印本页]

作者: shiyiming    时间: 2004-4-6 23:57
标题: 求助:数据变形
from

A   5
B   2
C   3

to

A
A
A
A
A
B
B
C
C
C

谢谢了
作者: shiyiming    时间: 2004-4-7 04:30
标题: hope it is useful
data a;
input x $ y @;
cards;
A 5
B 2
C 3
;
run;
data b(drop= y i);
set a;  
if x='A' then do i=1 to y ;
output;
end;
if x='B' then do i=1 to y ;
output;
end;
if x='C' then do i=1 to y ;
output;
end;
run;
作者: shiyiming    时间: 2004-4-7 06:36
data tem;
set tem;
do i=1 to b;
output;
end;
keep x;
run;
作者: shiyiming    时间: 2004-4-7 13:15
标题: some improvement on holly's code
[quote="holly":04e2b]data a;
input x $ y @;
cards;
A 5
B 2
C 3
;
run;
data b(drop= y i);
set a;  
if x='A' then do i=1 to y ;
output;
end;
if x='B' then do i=1 to y ;
output;
end;
if x='C' then do i=1 to y ;
output;
end;
run;[/quote:04e2b]

对上面的代码稍微做了一点改进,尤其当x的观测值很多时,程序相对显得简单,适用性更广一点~~~

data b(drop= y i);
set a;
by x;
if first.x then do i=1 to y ;
output;
end;
run;
作者: shiyiming    时间: 2004-4-7 15:37
谢 谢 各 位 , 没 想 到 有 这 么 多 人 应 答 。

My solution:

data a (drop=count i);
input var $ count @;
do i = 1 to count;
output;
end;
datalines;
A 5
B 2
C 3
;
run;
proc print data=a;
run;

Q2:
if
A 5
B 0
C 3
then results are the same

but if
A 5
B
C 3
ie a missing value in the data, the error
ERROR: Invalid DO loop control information, either the INITIAL or TO expression is missing or
the BY expression is missing, zero, or invalid
RULE:      ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+-
160        C 3
var=B count=. i=1 _ERROR_=1 _N_=2

? 我 记 得 有 一 missover option.

data a (drop=count i);
infile datalines missover;
input var $ count @;
do i = 1 to count;
output;
end;
datalines;
A 5
B
C 3
;
run;
还 是 错 。 有 没 有 人 能 指 正 ? 谢 谢 。
作者: shiyiming    时间: 2004-4-7 15:44
实 际 的 数 据 是 :

  X Y Z P
A 5 1 1 1
B 2    3 3
C 3 2   2

如 何 变 成 to

A X
A X
A X
A X
A X
A Y
A Z
A P
B X
B X
B Z
B Z
B Z
。 。 。
。 。 。
C P
C P
是 否 一 定 要 把 missingvalue转 成 0?
谢 谢 大 家 。
作者: shiyiming    时间: 2004-4-7 15:47
sorry, the data shld be the following, _ stands for missing value


_ X Y Z P
A 5 1 1 1
B 2 _ 3 3
C 3 2 _ 2
作者: shiyiming    时间: 2004-4-7 18:38
data tem;
input class $ X Y Z P;
cards;
A 5 1 1 1
B 2 . 3 3
C 3 2 . 2
;run;

data tem;
set tem;
array arr _numeric_;
do over arr;
   if arr^=. then do;
      do i=1 to arr;
         name=upcase(vname(arr));
         output;
      end;
   end;
end;
keep class name;
run;

proc print;run;




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