在SAS中基于2个变量合并数据集

时间:2010-03-15 09:02:08

标签: database variables merge sas

我正在使用不同的数据库。所有这些都包含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:我猜测下划线与字体布局有关,但粗体和斜体都应该是正常的:)

4 个答案:

答案 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;