楼主: lzhpanda
983 8

[面板数据求助] 在不能使用xtset的情况下,怎么生成滞后项lag term? [推广有奖]

  • 0关注
  • 0粉丝

本科生

41%

还不是VIP/贵宾

-

威望
0
论坛币
924 个
通用积分
7.3295
学术水平
1 点
热心指数
1 点
信用等级
0 点
经验
679 点
帖子
26
精华
0
在线时间
128 小时
注册时间
2013-10-29
最后登录
2025-11-9

楼主
lzhpanda 发表于 2023-4-1 19:40:47 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我在处理一组很unbalanced的数据,不能用tsset的样子,那么怎么生成按年的滞后项L.X呢?

IDYear X L.X(应该生成这样)
1 2001 1 0
1 2003 3 2
1 2005 5 4
2 2000 0 .
2 2002 2 1
2 2004 4 3
3 2003 3 2
3 2004 4 3
3 2005 5 4

As xtset is impossible for my case, how do I generate L.X?

二维码

扫码加我 拉你入群

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

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

关键词:xtset term Set lag ERM

沙发
qianchen 发表于 2023-4-1 22:03:27
为啥不能xtset??

藤椅
lzhpanda 发表于 2023-4-2 10:59:38
qianchen 发表于 2023-4-1 22:03
为啥不能xtset??
因为并不是公司数据,而是别的房地产数据。houseid特别多,但是连续记录的缺失也很多

板凳
Markqb 发表于 2023-4-2 21:43:28
你可以通过以下步骤生成按年的滞后项L.X:

首先按照ID和Year排序,可以使用sort命令,例如:sort IDYear
然后使用by命令对每个ID进行循环,并计算L.X的值,例如:
by ID: gen L.X = X[_n-1] if Year == Year[_n]-1
这里的gen L.X表示生成一个名为L.X的新变量,X[_n-1]表示当前观测的前一个观测的X值,Year[_n]-1表示当前观测的前一年。by ID:表示对每个ID进行循环。
3. 最后,你可以用fillin命令补全缺失值,例如:
fillin ID Year: keep if _fillin == 0
这里的fillin ID Year:表示对每个ID和每年进行补全,_fillin == 0表示只保留原始数据中存在的观测。

这样就可以生成按年的滞后项L.X了

报纸
lzhpanda 发表于 2023-4-3 09:41:44
Markqb 发表于 2023-4-2 21:43
你可以通过以下步骤生成按年的滞后项L.X:

首先按照ID和Year排序,可以使用sort命令,例如:sort IDYea ...
十分感谢,看来很多人都建议我用fillin
我自己之前也试过面板的tsfill

但我这数据量有点夸张,这么搞有点慢就是了……

地板
黃河泉 在职认证  发表于 2023-4-3 11:05:24
lzhpanda 发表于 2023-4-3 09:41
十分感谢,看来很多人都建议我用fillin
我自己之前也试过面板的tsfill
这样取滞后项是有问题的,同样一年 (例如 2020),有的滞后项是 2019 年,有的可能是 2018 年。

7
Markqb 发表于 2023-4-3 11:11:46
可以使用panel命令中的lags选项来生成滞后项。具体而言,可以先将数据集按照ID和Year排序,然后使用panel命令生成滞后项,如下所示:
//将数据集按照ID和Year排序
sort ID Year

//生成按年的滞后项L.X
by ID: egen L1.X = L(X)
by ID: egen L2.X = L2(X)
by ID: egen L3.X = L3(X)
by ID: egen L4.X = L4(X)
by ID: egen L5.X = L5(X)



这样生成的滞后项就可以确保按照年份的滞后了。需要注意的是,lags选项的可用范围取决于每个变量在数据集中的观测时间跨度。如果变量的最早观测时间为2000年,最晚观测时间为2020年,那么lags选项的可用范围就是L1-L20。

8
lzhpanda 发表于 2023-4-3 17:06:31
黃河泉 发表于 2023-4-3 11:05
这样取滞后项是有问题的,同样一年 (例如 2020),有的滞后项是 2019 年,有的可能是 2018 年。
是的,我最后用了一种奇怪的方法在后面,你看看如何

9
lzhpanda 发表于 2023-4-3 17:15:13
Markqb 发表于 2023-4-3 11:11
可以使用panel命令中的lags选项来生成滞后项。具体而言,可以先将数据集按照ID和Year排序,然后使用panel命 ...
我最后用了种奇怪的方法,你看看如何。
由于我需要的是lag的price index。 但是由于是quarterly数据,你的方法太占用内存了,所以我是这么干的

sort Close_Qtime
bys Close_Qtime: gen dup=[_n]   

/*只保留每个quarter的第一个数据,然后生成lag。这样的lag是连续的而且正确的
sort dup Close_Qtime
bys dup :gen indexsamplelag=index[_n-1] if dup==1  

/*这个时候每一个季度比如2022q1只有一个indexsamplelag数据,再对于所有的2022q1都生成一个indexlag等于他就好,我这里用的是sum
bys Close_Qtime:  egen indexlag=sum(indexsample)   

/*因为是lag term,所以第一个季度的结果不应该是0,而是.
replace indexlag=. if indexlag==0

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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-2-8 14:05