推 wlsherica:感謝m大,我來試試看~~ 08/18 07:54
※ 引述《wlsherica (CrevetteStudio)》之銘言:
: A檔
: Indo yrmon price
: 1101 200104 8.2
: 3108 200201 5.8
: B檔
: Indo yrmon vol
: 1101 200103 23
: 3108 200103 16
: 1101 200106 20
: 3108 200106 18
: 1101 200109 22
: 3108 200109 19
: 1101 200112 25
: 3108 200112 15
: 1101 200203 28
: 3108 200203 14
: 希望以Indo變項當作index去作合併成為下面的檔案
: 其中要取B檔案中同Indo的觀測值的「上一個月份資料」的vol變項,
: 如下(也就是檔案B中我標記黃色的觀測值)
: C檔
: Indo yrmon price vol
: 1101 200104 8.2 23
: 3108 200202 5.8 15
^^^^^^
這裡不知道是不是打錯,想要的應該是200201 (?)
我依照你上面給的例子,寫一小段有點投機的程式
不確定是否可以解決你的問題
* 做一個新的表d 把原本表b的yrmon改名為a *;
data d;
set b;
a=yrmon;
drop yrmon;
run;
* 為了merge用 *;
proc sort data=d;
by indo;
run;
* a和d merge成表e 判斷你要的依據為temp *;
data e;
merge a d;
by indo;
temp=yrmon-a;
run;
* temp如果temp小於0 表示表b的日期比表a的日期晚 捨棄 *;
data e;
set e;
if temp>0;
run;
* 依indo 及temp排序 *;
proc sort data=e;
by indo temp;
run;
* 你要的表c 即為temp最小的那個數 *;
data c;
set e;
by indo;
if first.indo then output ;
drop a temp;
run;
不過前提是你的表a的日期,可以在表b找到前一月的資料
不然這段程式可能會發生vol是前兩月資料的問題
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.119.145.80
※ 編輯: MmmRrrrX 來自: 140.119.145.80 (08/18 04:03)