作者kingbee ( 将心比心)
看板Statistics
标题Re: [问题] SAS如何保留条件符合的变数前/後几笔资料
时间Thu Dec 10 09:33:53 2009
小弟不才写了一些 望请有人继续修改
data k1 k2;
input date1$ date2$ con$ value;
if date1=date2 then s=_n_;
nm=_n_;
if date1=date2 then output k1;
else output k2;
cards;
8/8 8/1 A 0.1
8/8 8/3 A 0.2
8/8 8/5 A 0.3
8/8 8/7 A 0.15
8/8 8/8 A 0.2
8/8 8/9 A 0.1
8/8 8/10 A 0.3
9/3 8/29 B 0.5
9/3 9/1 B 1
9/3 9/2 B 0.2
9/3 9/3 B 0.4
9/3 9/6 B 0.6
9/3 9/7 B 0.2
;
proc print data=k1;
proc print data=k2;
proc sql ;
create table sel as
select two.date1 as date1,
two.date2 as date2,
two.con as con,
two.value as value,
two.nm as nm,
one.s as s
from k1 one , k2 two
where -4<two.nm-one.s<2
;
run;
data fin;
set sel k1;
drop nm s;
proc sort data=fin; by date1 date2;
proc print data=fin;
run;
※ 引述《fine4313 (GMARKET代买)》之铭言:
: 因为找不到相关资料,所以PO上版问大家
: EX:
: date1 date2 con value
: 8/8 8/1 A 0.1
: 8/8 8/3 A 0.2
: 8/8 8/5 A 0.3
: 8/8 8/7 A 0.15
: 8/8 8/8 A 0.2
: 8/8 8/9 A 0.1
: 8/8 8/10 A 0.3
: 9/3 8/29 B 0.5
: 9/3 9/1 B 1
: 9/3 9/2 B 0.2
: 9/3 9/3 B 0.4
: 9/3 9/6 B 0.6
: 9/3 9/7 B 0.2
: 如果我设if,希望抓到date1=date2的那一笔资料
: 并由那一笔资料网前抓三笔、後一笔,
: 想要的结果如下:
: date1 date2 con value
: 8/8 8/3 A 0.2
: 8/8 8/5 A 0.3
: 8/8 8/7 A 0.15
: 8/8 8/8 A 0.2
: 8/8 8/9 A 0.1
: 9/3 9/1 B 1
: 9/3 9/2 B 0.2
: 9/3 9/3 B 0.4
: 9/3 9/6 B 0.6
: 请问该怎麽写呢
: 谢谢:)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.29.135.126
1F:推 west1996:s的功能似乎可以用one.nm取代掉? 12/10 10:34
2F:→ kingbee:s是给符合相同日期的 nm是给日期前三笔後一笔对应的 12/10 14:11
3F:推 west1996:恩,我的意思是在k1中s与nm的值是一模一样的,都表示在 12/10 15:12
4F:→ west1996:原始资料的第几笔,所以在sql里面s的功能似乎可以完全由 12/10 15:12
5F:→ west1996:k1里的nm来表示,这样可以稍微省一点空间,不过差别不大 12/10 15:13
6F:→ west1996:就是了XD 12/10 15:13
7F:推 fine4313:谢谢各位,我成功了:) 12/10 15:50