楼主: jintianxiu
6773 10

[原创博文] 已解决:在面板数据中如何使用LAG函数(大家进来帮忙啊) [推广有奖]

  • 2关注
  • 0粉丝

本科生

8%

还不是VIP/贵宾

-

威望
0
论坛币
4 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
590 点
帖子
81
精华
0
在线时间
38 小时
注册时间
2010-3-6
最后登录
2012-9-21

楼主
jintianxiu 发表于 2011-12-9 13:26:11 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
问题是:由于SAS中lag函数是取同一个变量的前一个观测值。那么对于面板数据,公司交界处,使用lag函数之后公司2的第一个值会取成公司1的最后一个值。。。在SAS中怎么样处理这个问题呢?我尝试了,在lag语句后加入了by变量,但是没有起作用。。。
大家帮忙啦~~
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:面板数据 如何使用 已解决 lag 最后一个 如何

沙发
jintianxiu 发表于 2011-12-9 13:32:56
举个例子:有90个公司,1000个月的数据,对每个公司的变量return求取月滞后值。。。怎么样将公司分开呢?是不是在SAS中有个定义时间变量的东东呢

藤椅
trslvpeng 发表于 2011-12-9 16:22:50
data return;
set return;
by stock date;
lag_dividend=lag(dividend);
lag_price=lag(price);
if first.stock then do;
lag_price=.;
lag_dividend=.;
end;
dailyr=(price-lag_price+lag_dividend)/lag_price;
run;

我之前写的 ,也刚好用到了这个 ,希望对你有帮助

板凳
lVMan9PN 发表于 2011-12-11 09:36:24
支持者顶啊

报纸
jintianxiu 发表于 2011-12-11 15:10:02
trslvpeng 发表于 2011-12-9 16:22
data return;
set return;
by stock date;
谢谢!应该对的~

地板
jintianxiu 发表于 2011-12-11 15:26:28
trslvpeng 发表于 2011-12-9 16:22
data return;
set return;
by stock date;
但是,我以前用这个方法,加入stock是股票代码。。。
这样写data return;
set return;
if stock = lstock;
then lag_price=lag(price);
else lag_price=.;
run;
lstock 是股票代码的前个观察值
这个程序计算出来的非常混乱,就是不对。但是自己觉得理论上市正确的呀,希望能指教一二,不胜感激。。。

7
ntsean 发表于 2011-12-11 23:33:10
用 proc expand
支持 by, code写起来也很简单,不仅支持一个lag,也支持多个lag

8
jintianxiu 发表于 2011-12-12 11:22:58
ntsean 发表于 2011-12-11 23:33
用 proc expand
支持 by, code写起来也很简单,不仅支持一个lag,也支持多个lag
请高手详细指教具体,我查阅了下proc expand 命令,未得其解。在解决本问题时候,请指教~~~

9
ntsean 发表于 2011-12-12 11:33:25
jintianxiu 发表于 2011-12-12 11:22
请高手详细指教具体,我查阅了下proc expand 命令,未得其解。在解决本问题时候,请指教~~~
可以参考下面的例子

data a;
id=1;
do x=1 to 10;
output;
end;
id=2;
do x=51 to 60;
output;
end;
run;

proc expand data=a out=b;
by id;
convert x=xlag1 /transformout=(lag 1);
convert x=xlag2 /transformout=(lag 2);
convert x=xlead1 /transformout=(lead 1);
convert x=xlead2 /transformout=(lead 2);
run;

10
trslvpeng 发表于 2012-1-1 21:59:30
jintianxiu 发表于 2011-12-11 15:26
但是,我以前用这个方法,加入stock是股票代码。。。
这样写data return;
set return;
不知道你这个 stock=lstock具体什么意思,lstock 是股票代码吗,那要先生成lstock岂不是早就用到了lag?  我的解决方案就是前面说的 if first.stock then do lag_price=.

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-10 02:55