SAS中文论坛
标题:
求助:一个SAS数据集转化问题!
[打印本页]
作者:
shiyiming
时间:
2007-12-14 15:22
标题:
求助:一个SAS数据集转化问题!
我遇到一个依已有数据集生成新数据集的问题,由于我刚接触SAS不久,水平实在是低,烦请高手们帮助我一下,不胜感激!
已有数据集为三列,如下:
[color=#0000FF:25shs87p]id x y
1 0 0
2 0 3
3 0 30
4 0 81
5 0 7
6 14 39
7 16 58
8 18 18
9 19 19
10 19 19
11 19 19
12 19 19
13 19 19
14 19 19
15 19 19
16 19 19
17 19 19
18 20 20
19 24 32
20 24 32
.....[/color:25shs87p]
目标要求:新生成的数据集的列数等于id列的行数加上一ticks列,ticks列放在整个新数据集之前。ticks列的行数由X列的最小值与Y列的最大值决定,如:xmin=0、ymax=32,则ticks列的行数为0-32(整数),共33列。后面列的列名依次为id=1,id=2,...。这些列的数据生成时这样的,如id=1时,x=0、y=0,赋值id=1、ticks=0单元格为1,id=1列的其它单元格为空。再如id=6时,x=14、y=39,赋值id=6、ticks=14-39单元格为1(共39-14+1=36个1),id=6列的其它单元格为空。新数据集具体的形式如下:
[color=#0000BF:25shs87p]
ticks id=1 id=2 id=3 id=4 id=5 id=6 ……
0 1 1 1 1 1 . .
1 . 1 1 1 1 . .
2 . 1 1 1 1 . .
3 . 1 1 1 1 . .
4 . . 1 1 1 . .
5 . . 1 1 1 . .
6 . . 1 1 1 . .
7 . . 1 1 1 . .
8 . . 1 1 . . .
9 . . 1 1 . . .
10 . . 1 1 . . .
11 . . 1 1 . . .
12 . . 1 1 . . .
13 . . 1 1 . . .
14 . . 1 1 . 1 .
15 . . 1 1 . 1 .
16 . . 1 1 . 1 .
17 . . 1 1 . 1 .
18 . . 1 1 . 1 .
19 . . 1 1 . 1 .
20 . . 1 1 . 1 .
21 . . 1 1 . 1 .
22 . . 1 1 . 1 .
23 . . 1 1 . 1 .
24 . . 1 1 . 1 .
25 . . 1 1 . 1 .
26 . . 1 1 . 1 .
27 . . 1 1 . 1 .
28 . . 1 1 . 1 .
29 . . 1 1 . 1 .
30 . . 1 1 . 1 .
31 . . . 1 . 1 .
32 . . . 1 . 1 .
33 . . . 1 . 1 .
34 . . . 1 . 1 .
35 . . . 1 . 1 .
36 . . . 1 . 1 .
37 . . . 1 . 1 .
38 . . . 1 . 1 .
39 . . . 1 . 1 .
40 . . . 1 . . .
41 . . . 1 . . .
42 . . . 1 . . .
43 . . . 1 . . .
44 . . . 1 . . .
45 . . . 1 . . .
46 . . . 1 . . .
47 . . . 1 . . .
48 . . . 1 . . .
49 . . . 1 . . .
50 . . . 1 . . .
51 . . . 1 . . .
52 . . . 1 . . .
53 . . . 1 . . .
54 . . . 1 . . .
55 . . . 1 . . .
56 . . . 1 . . .
57 . . . 1 . . .
58 . . . 1 . . .
59 . . . 1 . . .
60 . . . 1 . . .
61 . . . 1 . . .
62 . . . 1 . . .
63 . . . 1 . . .
64 . . . 1 . . .
65 . . . 1 . . .
66 . . . 1 . . .
67 . . . 1 . . .
68 . . . 1 . . .
69 . . . 1 . . .
70 . . . 1 . . .
71 . . . 1 . . .
72 . . . 1 . . .
73 . . . 1 . . .
74 . . . 1 . . .
75 . . . 1 . . .
76 . . . 1 . . .
77 . . . 1 . . .
78 . . . 1 . . .
79 . . . 1 . . .
80 . . . 1 . . .
81 . . . 1 . . .
......
[/color:25shs87p]请高手指点,以免的我手工输入这么多的“1”而又进展缓慢。感激不尽!
作者:
shiyiming
时间:
2007-12-15 21:39
标题:
Re: 求助:一个SAS数据集转化问题!
[code:2sdmsr7u]data a;
input id x y;
z=y-x+1;
cards;
1 0 0
2 0 3
3 0 30
4 0 81
5 0 7
6 14 39
7 16 58
8 18 18
9 19 19
10 19 19
11 19 19
12 19 19
13 19 19
14 19 19
15 19 19
16 19 19
17 19 19
18 20 20
19 24 32
20 24 32
;
run;
proc sql noprint;
select max(y)-min(x)+1 into :ticks from a;
quit;
data b(drop=z i);
set a(keep=z);
array aa(*) a1-a%left(&ticks);
do i=1 to z;
aa(i)=1;
end;
run;
proc transpose data=b out=c(drop=_name_) prefix=id;
data c1(drop=i);retain ticks;do i=1 to &ticks;set c;ticks=i-1;output;end;
run;[/code:2sdmsr7u]
作者:
shiyiming
时间:
2007-12-17 17:08
标题:
Re: 求助:一个SAS数据集转化问题!
感谢waterlwh 先生的指导,相信费了不少功夫,谢谢!这里还有一个问题,运行您的程序最后得到的C1数据集与我提供的目标样式是有出入的:C1数据集的“1”全部向表的上方靠齐,而目标样式中,某列“1”的起始位置是由X值决定的。您是否有时间再看看我的目标数据集样式,对程序做一下修改。再次感谢您的帮助。
作者:
shiyiming
时间:
2007-12-18 00:45
标题:
Re: 求助:一个SAS数据集转化问题!
[code:z71gbsoe]data a;
input id x y;
z=y-x+1;
cards;
1 0 0
2 0 3
3 0 30
4 0 81
5 0 7
6 14 39
7 16 58
8 18 18
9 19 19
10 19 19
11 19 19
12 19 19
13 19 19
14 19 19
15 19 19
16 19 19
17 19 19
18 20 20
19 24 32
20 24 32
;
run;
proc sql noprint;
select max(y)-min(x)+1 into :ticks from a;
quit;
data b(drop=z x y i id);
set a;
x=x+1;
y=y+1;
array aa(*) a1-a%left(&ticks);
do i=x to y;
aa(i)=1;
end;
run;
proc transpose data=b out=c(drop=_name_) prefix=id;
run;
data c1;retain ticks;set c; ticks=_n_-1;
run;
[/code:z71gbsoe]
作者:
shiyiming
时间:
2007-12-18 15:08
标题:
Re: 求助:一个SAS数据集转化问题!
Perfect!
Good job!
Thanks very much!
作者:
shiyiming
时间:
2008-1-5 22:44
标题:
Re: 求助:一个SAS数据集转化问题!
好方法都被大家想完了,我只能拿个最拙劣的方法出来混混,哈哈。
%macro a;
proc sql;
select min(x),max(y) into :L,:H
from a;
quit;
data _null_;
dsid=open('a');
nobs=attrn(dsid,'nobs');
call symput('nobs',nobs);
rc=close(dsid);
run;
data result;
do ticks=&l to &h;
output;
end;
run;
%do n=1 %to &nobs;
data _null_;
set a;
if id=&n;
call symput('x',x);
call symput('y',y);
run;
data id;
%if &l<&x %then %do;
do ticks=&l to %eval(&x-1);
id&n=.;
output;
end;
%end;
do ticks=&x to &y;
id&n=1;
output;
end;
%if &h>&y %then %do;
do ticks=%eval(&y+1) to &h;
id&n=.;
output;
end;
%end;
run;
data result;
merge result id;
by ticks;
run;
%end;
%mend;
%a;
作者:
shiyiming
时间:
2008-1-7 20:05
标题:
Re: 求助:一个SAS数据集转化问题!
试验成功,又多了个方法,感谢您的帮助!
欢迎光临 SAS中文论坛 (https://mysas.net/forum/)
Powered by Discuz! X3.2