我正在使用不同的数据库。所有这些都包含1000多家公司的信息。公司由其股票代码(通常在股票报价单上看到的名称的短版本(即福特作为F))定义。
除了要合并的股票代码之外,我还必须合并时间。我在整个时间序列中使用月份作为计数变量。
的最终目的是回归 Y(jt) = c + X(jt) +X1(jt)
等j = company
(自动收报机)和t = time
(月)。
所以想象一下,我有2个数据库,其中一个是带有变量的基础数据库,例如Tickers,月份,公司的beta(风险度量)等等,第二个数据库有一个额外的变量(比如市值) 。
我想要做的是根据股票代码和月份合并这两个数据库。
示例:基础数据库:
Ticker ____ Month ____ Betas AA ____ 4 ____ 1.2 BB ____ 8 ____ 1.18
第二个数据库:
Ticker ____ Month ____ MCAP AA ____ 4 ____ 8542 BB ____ 6 ____ 1245
然后在合并之后我想有这样的事情:
Ticker ____ Month ____ Betas ____ MCAP AA ____ 4 ____ 1.2 ____ 8542
因此,必须删除所有与日期和股票代码不匹配的观察结果。我确信这是可能的,只是找不到合适的代码类型。
PS:我猜测下划线与字体布局有关,但粗体和斜体都应该是正常的:)
答案 0 :(得分:3)
同意Jonathan ......在通过自动收报机和时间独立排序两个数据集之后,合并的数据步骤就是我将要使用的.....很少修改
data want;
merge base(in = b) mcap(in = m);
by ticker time;
if m & b;
run;
两个数据集中没有共同滚动条和时间的记录将自动删除..
答案 1 :(得分:1)
调用两个数据集base和mcap,并假设它们已经按自动收报机和月份排序,你可以这样做:
data want;
merge base(in = b)
mcap(in = m);
if m & b;
run;
子集化if将不接受任何在浴室数据集中不匹配的行。
答案 2 :(得分:0)
好的,看起来你可以通过以下方式轻松完成:
proc sort data=work;
by ticker month;
run;
proc sort data=wsize;
by ticker month;
run;
data test;
merge work(in=a) wsize(in=b);
by ticker month;
frommerg=a;
fromwtvol=b;
run;
data test;
set test;
if frommerg=0 then delete;
run;
data test;
set test;
if fromwtvol = 0 then delete;
run;
data test;
set test;
drop frommerg fromwtvol;
run;
这是我使用的代码,我在发布前尝试了这个,因为我不想看起来像一个leecher但是碰巧我试过的2个数据库没有任何共同点(70.000观察的几率是多少:D) ,我重试了它并且它有效(现在!)
非常感谢!
答案 3 :(得分:0)
proc sort data=database1;
by ticker month;
run;
proc sort data=database2;
by ticker month;
run;
data gh;
merge database1(in=a) database2(in=b);
by ticker month;
if a and b;
run;