谢谢了作者: 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;