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

如何让SAS使用股票发行04W交易前最近一次的信息填写缺失记录?,sas,Sas,**这张唱片实际上不见了。如何让SAS使用股票发行04W交易前最近一次的信息填写缺失记录 我试图计算一个市场价值,即股票乘以每一次发行的价格。然后我想总结一下当天所有的mv_问题。我在这里这样做是为了表明,对于19921006天,总市值应该是454800。但在1992/10/07日,04W的记录不存在,因为该期债券当天没有交易。如果我将之前的交易活动替换为04W,正如我在该数据集中所做的那样,mv_日将为455500。我如何创建该缺失记录,以便当天的总数包括该公司所有可能的股票发行(04W使用前

**这张唱片实际上不见了。如何让SAS使用股票发行04W交易前最近一次的信息填写缺失记录

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

我偶然发现了一个老问题,但我想我会回答一个替代proc expand的问题,以防有人看到这个问题

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

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
下面是我为处理这个问题而编写的一段快速代码

     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
生成的数据集LOCF如下所示:

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;
公司的第一条记录是否可能缺少值?我猜不,但是如果是这样的话(可能只是为了安全),考虑一下以前的公司的数据没有被转发:

     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.

如果不是,则需要将日期更改为有效的SAS日期,否则proc expand是一个不错的选择。做得好。我在SAS everywhere中搜索LOCF,得到了一系列复杂的解决方案,所有这些解决方案都要求已经存在一个组标识符。这是一个救命恩人!
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;