楼主: yihenglu
2274 13

[数据管理求助] 如何根据某个虚拟变量在观测期间内的不同取值设置新的虚拟变量? [推广有奖]

  • 0关注
  • 0粉丝

硕士生

7%

还不是VIP/贵宾

-

威望
0
论坛币
12 个
通用积分
0.0792
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
706 点
帖子
35
精华
0
在线时间
230 小时
注册时间
2018-1-7
最后登录
2025-1-19

楼主
yihenglu 学生认证  发表于 2021-5-12 19:52:17 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
以下为2009-2019年的面板数据,stkcd对应的multi可能从0变成1,也可能从1变成0,也可能保持不变。

如何生成一个虚拟变量var1,当stkcd对应的multi在某一年从0变成1时,stkcd对应的var1全部取1,反之取0?
比如000002对应的multi在2014年变成了1,那么使000002对应的var1在2009至2019年的取值都是1。

如何生成一个虚拟变量var2,当stkcd对应的multi在某一年从1变成0时,stkcd对应的var2全部取1,反之取0?比如000010对应的multi在2015年变成了0,那么使000010对应的var2在2009至2019年的取值都是1。


* Example generated by -dataex-. To install: ssc install dataex
clear
input str12 stkcd int year byte multi
"000002" 2009 0
"000002" 2010 0
"000002" 2011 0
"000002" 2012 0
"000002" 2013 0
"000002" 2014 1
"000002" 2015 1
"000002" 2016 1
"000002" 2017 1
"000002" 2018 1
"000002" 2019 1
"000004" 2011 0
"000004" 2012 0
"000004" 2013 0
"000004" 2014 0
"000004" 2015 1
"000004" 2016 1
"000004" 2017 0
"000004" 2018 0
"000004" 2019 0
"000005" 2009 0
"000005" 2010 0
"000005" 2011 0
"000005" 2012 0
"000005" 2013 0
"000005" 2014 0
"000005" 2015 0
"000005" 2016 0
"000005" 2017 0
"000005" 2018 0
"000005" 2019 0
"000006" 2009 0
"000006" 2010 1
"000006" 2011 1
"000006" 2012 1
"000006" 2013 1
"000006" 2014 0
"000006" 2015 0
"000006" 2016 0
"000006" 2017 0
"000006" 2018 0
"000006" 2019 0
"000007" 2012 0
"000007" 2013 0
"000007" 2014 0
"000007" 2015 0
"000007" 2016 1
"000008" 2013 0
"000008" 2014 0
"000008" 2015 0
"000008" 2016 0
"000008" 2017 0
"000008" 2018 1
"000008" 2019 1
"000009" 2011 0
"000009" 2012 0
"000009" 2013 0
"000009" 2014 0
"000009" 2015 0
"000009" 2016 0
"000009" 2017 0
"000009" 2018 0
"000009" 2019 0
"000010" 2013 1
"000010" 2014 1
"000010" 2015 0
"000010" 2016 0
"000010" 2017 0
"000010" 2018 0
"000011" 2009 0
"000011" 2010 0
"000011" 2011 0
"000011" 2012 0
"000011" 2013 0
"000011" 2014 0
"000011" 2015 0
"000011" 2016 0
"000011" 2017 0
"000011" 2018 0
"000011" 2019 0
"000012" 2015 0
"000012" 2016 0
"000012" 2017 0
"000012" 2018 0
"000012" 2019 0
"000014" 2009 0
"000014" 2010 0
"000014" 2011 0
"000014" 2012 0
"000014" 2013 0
"000014" 2014 0
"000014" 2015 1
"000014" 2016 1
"000014" 2017 0
"000014" 2018 0
"000014" 2019 0
"000016" 2009 0
"000016" 2010 0
"000016" 2011 0
"000016" 2012 0
end




二维码

扫码加我 拉你入群

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

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

关键词:虚拟变量 generated generate install example

沙发
黃河泉 在职认证  发表于 2021-5-13 07:52:10
你的叙述不够完整,像 000004, 000006 等是要怎么处理?

藤椅
黃河泉 在职认证  发表于 2021-5-13 08:52:10
试试 (感谢 Ken Chui 之建议)
  1. bysort stkcd (year): gen v1 = (multi==0 & multi[_n+1]==1)
  2. bys stkcd: egen wanted1 = max(v1)
  3. bysort stkcd (year): gen v2 = (multi==1 & multi[_n+1]==0)
  4. bys stkcd: egen wanted2 = max(v2)
复制代码
已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
葫芦娃大王 + 10 + 10 精彩帖子
Sunknownay + 3 + 3 + 3 热心帮助其他会员

总评分: 经验 + 10  论坛币 + 10  学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

板凳
yihenglu 学生认证  发表于 2021-5-13 15:34:35
黃河泉 发表于 2021-5-13 08:52
试试 (感谢 Ken Chui 之建议)
非常感谢黄老师解答困惑了我好久的问题!您在上一楼中提醒的问题我确实没有注意到,如果要删除mutli在观测区间内有多次变动的stkcd,比如000006(multi从0变1变0),又比如有一些stkcd对应的multi从1变0又变1,想要删除这些股票代码应该如何操作呢?

报纸
yihenglu 学生认证  发表于 2021-5-13 20:23:56
黃河泉 发表于 2021-5-13 08:52
试试 (感谢 Ken Chui 之建议)
还有一个问题想请教老师:要生成一个新变量var3,当stkcd对应的multi(在观测区间内)一直为1时,使stkcd对应的var3全部取1,反之var3全部取0,应该如何操作?

地板
DΘstinyじò 发表于 2021-5-13 22:18:51
yihenglu 发表于 2021-5-13 20:23
还有一个问题想请教老师:要生成一个新变量var3,当stkcd对应的multi(在观测区间内)一直为1时,使stkcd ...
针对以上各种条件,结合给出示例,尝试以下代码(实际按需修改):
  1. gen temp=multi
  2. bys stkcd (year): replace temp=.  if multi[_n]==multi[_n-1]
  3. bys stkcd (year): egen temp1=count(temp)
  4. bys stkcd (year): gen     wanted="一直是0"  if temp1==1 & multi[1]==0
  5. bys stkcd (year): replace wanted="一直是1"  if temp1==1 & multi[1]==1
  6. bys stkcd (year): replace wanted="从0→1"    if temp1==2 & multi[1]==0
  7. bys stkcd (year): replace wanted="从1→0"    if temp1==2 & multi[1]==1
  8. bys stkcd (year): replace wanted="需删除"   if temp1>=3
  9. drop temp*
  10. //需要虚拟变量,就执行追加执行下行
  11. //xi i.wanted ,noomit
复制代码

7
黃河泉 在职认证  发表于 2021-5-14 08:16:56
yihenglu 发表于 2021-5-13 15:34
非常感谢黄老师解答困惑了我好久的问题!您在上一楼中提醒的问题我确实没有注意到,如果要删除mutli在观测 ...
  1. drop if wanted1+wanted2 == 2
复制代码

8
黃河泉 在职认证  发表于 2021-5-14 08:20:57
yihenglu 发表于 2021-5-13 20:23
还有一个问题想请教老师:要生成一个新变量var3,当stkcd对应的multi(在观测区间内)一直为1时,使stkcd ...
试试
  1. bys stkcd: egen v3 = total(multi)  
  2. bys stkcd: gen wanted3 = (v3 == _N)
复制代码

9
yihenglu 学生认证  发表于 2021-5-14 11:48:41
DΘstinyじò 发表于 2021-5-13 22:18
针对以上各种条件,结合给出示例,尝试以下代码(实际按需修改):
非常感谢您的回答!但我在运行代码的过程中遇到了“command gen wanted is unrecognized”的报错,请教您该如何解决?

. gen temp=multi

.
. bys stkcd (year): replace temp=. if multi[_n]==multi[_n-1]
(11,721 real changes made, 11,721 to missing)

.
. bys stkcd (year): egen temp1=count(temp)

.
. bys stkcd (year): gen wanted="一直是0" if temp1==1&multi[1]==0
command gen wanted is unrecognized
r(199);

10
yihenglu 学生认证  发表于 2021-5-14 11:49:14
黃河泉 发表于 2021-5-14 08:16
感谢老师!完美解决了我的问题!

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

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