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