如何让 SAS 使用股票发行 04W 交易的最近一次信息填写缺失的记录

  • 本文关键字:一次 信息 记录 最近 SAS 交易 04W sas
  • 更新时间 :
  • 英文 :

company issue   datadate    shares  price   mv_issue mv_day
4439    04W 19921006    1100    120 132000   454800
4439    05W 19921006    1400    115 161000   454800
4439    06W 19921006    800 101 80800    454800
4439    07W 19921006    900 90  81000    454800
**4439  04W 19921006    1100    120 132000   455500**missing
4439    05W 19921007    1400    116 162400   455500
4439    06W 19921007    800 99  79200    455500
4439    07W 19921007    900 91  81900    455500
5510    02W 19940126    50  5   250  1090
5510    03W 19940126    120 7   840  1090
5510    02W 19940127    50  5   250  1210
5510    03W 19940127    120 8   960  1210

**记录实际上丢失了。如何让 SAS 使用股票发行 04W 交易的最近一次信息来填写缺失的记录?

我正在尝试计算每个独特发行的股票乘以价格的市场价值。 然后我想总结一下当天所有问题的mv_issue。 我在这里这样做是为了表明,对于第 19921006 天,总市场价值应该是 454800。 但在 1992/10/07 日,04W 的记录并不存在,因为当天没有交易这个问题。 如果我用之前的交易活动代替 04W,就像我在这个数据集中所做的那样,mv_day将是 455500。 如何创建此缺失记录,以便当天的总数包括该公司所有可能的股票发行量(使用前一天信息的 04W、05W、06W 和 07W)?谢谢你的帮助。

偶然发现的老问题,但我想我会回答proc扩展的替代方案,以防有人看到这个。

我喜欢尽可能使用数据步骤,如果所需的操作足够简单。最后的观察(LOCF)在我的脑海中很简单。如果您不需要,则无需将日期列更新为真正的 SAS 日期格式,尽管我个人建议这样做。只需要任何排序索引。给定数据集 RAW,如下所示:

     DATEC      |    DATEN   | VAL
01JAN2016T12:30   1767270600    1
01JAN2016T14:00   1767276000    2
01JAN2016T19:00   1767294000    5
02JAN2016T08:00   1767340800    3
06JAN2016T12:00   1767700800    .
21JAN2016T21:00   1769029200    8
03FEB2016T09:00   1770109200   10
13FEB2016T12:00   1770984000    6
21FEB2016T09:30   1771666200    .
15MAR2016T12:00   1773662400    .
20MAR2016T12:00   1774094400    5

这是我为处理这个问题而编写的一段快速代码。

proc sort data=RAW; by daten; run;
data LOCF;
  retain LOCF;
  set RAW;
  if val ne . then LOCF=val;
  if val=. then val=LOCF;
  drop LOCF;
run;

生成的数据集 LOCF 将如下所示:

     DATEC      |    DATEN   | VAL
01JAN2016T12:30   1767270600    1
01JAN2016T14:00   1767276000    2
01JAN2016T19:00   1767294000    5
02JAN2016T08:00   1767340800    3
06JAN2016T12:00   1767700800    3**
21JAN2016T21:00   1769029200    8
03FEB2016T09:00   1770109200   10
13FEB2016T12:00   1770984000    6
21FEB2016T09:30   1771666200    6**
15MAR2016T12:00   1773662400    6**
20MAR2016T12:00   1774094400    5
**This value was carried forward.

公司的第一条记录是否有可能缺少值?我猜没有,但如果是这样(可能只是为了安全起见),请考虑这一点,以便不会继承前一家公司的数据:

data LOCF;
  retain LOCF;
  set RAW;
  by company daten;
  if val ne . then LOCF=val;
  if ^first.company & val=. then val=LOCF;
  drop LOCF;
run;

最新更新