作者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
推 west1996:s的功能似乎可以用one.nm取代掉? 12/10 10:34
→ kingbee:s是給符合相同日期的 nm是給日期前三筆後一筆對應的 12/10 14:11
推 west1996:恩,我的意思是在k1中s與nm的值是一模一樣的,都表示在 12/10 15:12
→ west1996:原始資料的第幾筆,所以在sql裡面s的功能似乎可以完全由 12/10 15:12
→ west1996:k1裡的nm來表示,這樣可以稍微省一點空間,不過差別不大 12/10 15:13
→ west1996:就是了XD 12/10 15:13
推 fine4313:謝謝各位,我成功了:) 12/10 15:50