s*****a 发帖数: 431 | 1 写个程序,要调用某个变量的第一个及最后一个观测值,第一个观测值的方法用了
if _n_=1 then a=b;
就是不知道同样的方法,最后一个观测值的位置序号该怎么表示,请SAS高手指点一二
,多谢了! |
g**u 发帖数: 205 | 2 why don't you use first. and last. ? |
s*d 发帖数: 32 | 3 在set的时候可以定义end 这个indicator,比如
data b;
set a end = last;
if last;
run; |
s*****a 发帖数: 431 | 4 我试过用first.和last.可是不行,要先定义end吗?试试看先,多谢! |
s*****a 发帖数: 431 | 5 还是不行啊!我把程序贴上来,请指点!
data a;
set b end=last;
retain mintime maxtime;
if _n_=1 then mintime=time;
if last then maxtime=time;
s=int(maxtime-mintime)/300+1;
n=1;
do while (n<=s);
if time>=mintime+300*(n-1) & time
n=n+1;
end;
run;
time是b里的变量,它的第一个观测值是最小值,最后一个观测值是最大值,我其实就
是想调用time变量的最大和最小值,不知道有没有好的办法。
问题挺菜的,学sas不久,网上也查了找不到方法,这里牛人多,只能来这里求教了,
多谢! |
s*****a 发帖数: 431 | |
s*d 发帖数: 32 | 7 SAS是行处理的,maxtime最后才得到,之前一直是missing
所以你需要两步, 第一步得到mintime maxtime
然后做数据转换
data minmax(keep=mintime maxtime);
retain mintime;
set a end = last;
if _N_ = 1 then mintime = time;
if last then do;
maxtime = time;
output;
end;
run;
data b;
if _N_ = 1 then set minmax;
set a;
<....fill codes..........>
run;
【在 s*****a 的大作中提到】 : 还是不行啊!我把程序贴上来,请指点! : data a; : set b end=last; : retain mintime maxtime; : if _n_=1 then mintime=time; : if last then maxtime=time; : s=int(maxtime-mintime)/300+1; : n=1; : do while (n<=s); : if time>=mintime+300*(n-1) & time
|
s******r 发帖数: 1524 | 8 It works.
data b;
do i =1 to 100;
time=intnx('day','01Jan2013'd,i);output;
end;
run;
data a;
set b end=last;
retain mintime maxtime;
if _n_=1 then mintime=time;
if last then maxtime=time;
run;
or you can do,
proc sql;
create table b as
select max(time) format=mmddyy8. max_time,
min(time) format=mmddyy8. min_time
from b;
quit;run;
【在 s*****a 的大作中提到】 : 还是不行啊!我把程序贴上来,请指点! : data a; : set b end=last; : retain mintime maxtime; : if _n_=1 then mintime=time; : if last then maxtime=time; : s=int(maxtime-mintime)/300+1; : n=1; : do while (n<=s); : if time>=mintime+300*(n-1) & time
|
s*****a 发帖数: 431 | 9 学习了,太感谢了!
【在 s*d 的大作中提到】 : SAS是行处理的,maxtime最后才得到,之前一直是missing : 所以你需要两步, 第一步得到mintime maxtime : 然后做数据转换 : data minmax(keep=mintime maxtime); : retain mintime; : set a end = last; : if _N_ = 1 then mintime = time; : if last then do; : maxtime = time; : output;
|
s*****a 发帖数: 431 | 10 不知道为什么,数据库里maxtime还是无法得到,再研究研究。非常感谢!
【在 s******r 的大作中提到】 : It works. : data b; : do i =1 to 100; : time=intnx('day','01Jan2013'd,i);output; : end; : run; : data a; : set b end=last; : retain mintime maxtime; : if _n_=1 then mintime=time;
|
l******m 发帖数: 111 | 11 乍一看,应该是do while 里面的if 从句,里面有两个结果,改成then do; xxxxxxxx;
end;试试看
【在 s*****a 的大作中提到】 : 不知道为什么,数据库里maxtime还是无法得到,再研究研究。非常感谢!
|
l******m 发帖数: 111 | 12 其实,如果只是取极值的话,还是用楼上的sql方法最简洁
【在 s*****a 的大作中提到】 : 不知道为什么,数据库里maxtime还是无法得到,再研究研究。非常感谢!
|