作者MmmRrrrX (银色的灵魂)
站内Statistics
标题Re: [程式] SAS 取上一笔资料
时间Wed Aug 18 03:54:52 2010
※ 引述《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)
1F:推 wlsherica:感谢m大,我来试试看~~ 08/18 07:54