SAS中文论坛

标题: 帮忙:表格制作问题 [打印本页]

作者: shiyiming    时间: 2009-10-29 10:24
标题: 帮忙:表格制作问题
id            value1                  使得,value2
001           0.1                                0.2
001           0.2                                 0.2
001           0.3                                0.2
002           0.4                                0.6
002           0.5                                0.6
002           0.6                                0.6
002           0.7                                0.6
003           0.8                                0.9
003           0.9                                0.9
目的:使id=001号的value2 都等于  001号value1的第二条观测的值
      使id=002号的value2 都等于  002号value1的第三条观测的值
      使id=003号的value2 都等于  003号value1的第二条观测的值
作者: shiyiming    时间: 2009-10-29 10:37
标题: Re: 帮忙:表格制作问题
请问你的目的是什么呢?如果只是为了这个数据,下面的程序如何:
data new;
set old;
if id ='001' then value2 =0.2;
else if id ='002' then value2 =0.6;
esle value2 =0.9;
run;

无有错误提示,告成!
作者: shiyiming    时间: 2009-10-29 10:42
标题: Re: 帮忙:表格制作问题
目的已写在上面的文字中,当然不是上面简单的数据
作者: shiyiming    时间: 2009-10-29 10:44
标题: Re: 帮忙:表格制作问题
那我那条要求没有满足呢?说说看嘛。
作者: shiyiming    时间: 2009-10-29 10:48
标题: Re: 帮忙:表格制作问题
”使id=001号的value2 都等于 001号value1的第二条观测的值“
不能把value2=0.2 直接赋上去阿,要调”001号value1的第二条观测的值“
作者: shiyiming    时间: 2009-10-29 14:35
标题: Re: 帮忙:表格制作问题
我做了一个不过不大好 有一个地方不知道怎么解决
data a;
input id  value1;
value2=value1;
cards;
001 0.1
001 0.2
001 0.3
002 0.4
002 0.5
002 0.6
002 0.7
003 0.8
003 0.9
;

proc sort data=a out=b;
by id;
data b1;
set b;
if id=001 then count1+1;
else if id=002 then count2+1;
else if id=003 then count3+1;
proc transpose data=b out=b1;
run;
data c(drop=i);
set b1;
array co(*) col1-col9;
if _n_=3 then do;
do i=1 to 9;
if i<=3 then co(i)=co(2);
else if i<=7 then co(i)=co(3+3);
else   co(i)=co(7+2);  
end;
end;
proc transpose data=c out=b2;
proc print data=b2(drop=_name_);run;
作者: shiyiming    时间: 2009-10-29 14:38
标题: Re: 帮忙:表格制作问题
这是我做的另一种方法 但还没完善 做不下去了 高手帮忙指点指点 初学sas 献丑了
data a;
input id  value1;
value2=value1;
cards;
001 0.1
001 0.2
001 0.3
002 0.4
002 0.5
002 0.6
002 0.7
003 0.8
003 0.9
;
data a1 a2 a3;
set a;
if id=001 then output a1;
else if id=002 then output a2;
else if id=003 then output a3;
%macro aa(par1,par2,n,m,t);

proc transpose data=&par1 out=&par2;
var id value1 value2;
run;
data b(drop=i);
set &par2;
array co(&n) col1-col&n;
if _n_=&m then do;
do i=1 to &n;
co(i)=co(&t);
end;
end;
proc transpose data=b out=c;
run;
proc print data=c(drop=_name_);
run;
%mend aa;
%aa(a1,aa1,3,3,2)
作者: shiyiming    时间: 2009-10-29 17:08
标题: Re: 帮忙:表格制作问题
[code:1dkbm1rx]data a;
input id value1 ;
cards;
001 0.1
001 0.2
001 0.3
002 0.4
002 0.5
002 0.6
002 0.7
003 0.8
003 0.9
;
run;

data b;
set a;
by id;
if first.id then count=0;
count+1;
if id='001' and count=2 then output;
if id='002' and count=3 then output;
if id='003' and count=2 then output;
rename value1=value2;
drop count;
run;

data c;
merge a b;
by id;
run;

proc print;run;[/code:1dkbm1rx]
作者: shiyiming    时间: 2009-10-29 19:58
标题: Re: 帮忙:表格制作问题
thinkhao的真简介呀 学习中 我有很多语句用的还不会用 又学会了一个rename语句
作者: shiyiming    时间: 2009-10-29 21:20
标题: Re: 帮忙:表格制作问题
并不是我自满,我的程序至少是最简洁的。一目了然。
而且我觉得上面的程度没有做的更多更好。
我就不明白为什么一眼都看得出来的东西,还有把它倒过来倒过去的。
作者: shiyiming    时间: 2009-10-30 09:06
标题: Re: 帮忙:表格制作问题
thank thinkhao !
作者: shiyiming    时间: 2009-10-30 14:08
标题: Re: 帮忙:表格制作问题
咔咔,一般来问问题的时候都是尽量举个简洁的例子,而实际数据量很大,当然希望能有个应用范围更广的程序。

[quote="jingju11":2emd0b5e]并不是我自满,我的程序至少是最简洁的。一目了然。
而且我觉得上面的程度没有做的更多更好。
我就不明白为什么一眼都看得出来的东西,还有把它倒过来倒过去的。[/quote:2emd0b5e]
作者: shiyiming    时间: 2009-10-30 15:12
标题: Re: 帮忙:表格制作问题
Re: 帮忙:表格制作问题
由 jingju11 » 2009年 10月 29日 周四 9:20 pm

并不是我自满,我的程序至少是最简洁的。一目了然。
而且我觉得上面的程度没有做的更多更好。
我就不明白为什么一眼都看得出来的东西,还有把它倒过来倒过去的。



同意这位仁兄的话,以楼主的当前意思,这位仁兄的CODE是很不错的了




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