楼主: xinruizh
1489 7

[数据管理求助] 如何编码连续n年绩效不佳的企业? [推广有奖]

  • 0关注
  • 0粉丝

高中生

15%

还不是VIP/贵宾

-

威望
0
论坛币
994 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
185 点
帖子
6
精华
0
在线时间
43 小时
注册时间
2018-9-19
最后登录
2025-3-20

楼主
xinruizh 发表于 2020-11-10 14:37:21 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
Yu等人2018年发在smj上的文章UNDERPERFORMANCE DURATION AND INNOVATIVE SEARCH: EVIDENCE FROM THE HIGH-TECH MANUFACTURING INDUSTRY的一个变量
Underperformance duration at time t-1: A firm was coded as “0” if its performance was above or equal to aspiration and the length of the underperforming period was used for underperforming firms. For example, a firm would be coded as 1 if it had been underperforming for 1 year, 2 if it had been underperforming for 2 consecutive years, etc.
这里的aspiration是和行业中位数的比较。
请问这个变量是否可以通过stata编码,代码怎么写?(难点在于如何识别【连续】n年低于行业中值)
谢谢!





二维码

扫码加我 拉你入群

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

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

关键词:performance Performing Innovative Performan Duration

沙发
DΘstinyじò 发表于 2020-11-10 17:51:37
建议提问的时候给出一些示例数据,多一些信息,这样有助于解决您的问题。
下面是一个例子,参考一下。
(4家公司10年的r数据,行业中值选的是整个r变量的中值,可能你需要一个分年份的中值,需要自行分年份判断小于中值的情况,后面最大持续时间的统计可以参考)
  1. clear
  2. input byte stkcd int year double r
  3. 1 2001 348
  4. 1 2002 266
  5. 1 2003 136
  6. 1 2004  28
  7. 1 2005 868
  8. 1 2006 350
  9. 1 2007  71
  10. 1 2008 323
  11. 1 2009 555
  12. 1 2010 875
  13. 2 2001 204
  14. 2 2002 892
  15. 2 2003 584
  16. 2 2004 369
  17. 2 2005 850
  18. 2 2006 391
  19. 2 2007 119
  20. 2 2008 754
  21. 2 2009 695
  22. 2 2010 686
  23. 3 2001 931
  24. 3 2002 454
  25. 3 2003  67
  26. 3 2004 337
  27. 3 2005 974
  28. 3 2006 726
  29. 3 2007  45
  30. 3 2008 745
  31. 3 2009 496
  32. 3 2010 716
  33. 4 2001 859
  34. 4 2002 134
  35. 4 2003 488
  36. 4 2004 871
  37. 4 2005 766
  38. 4 2006 251
  39. 4 2007 166
  40. 4 2008 743
  41. 4 2009 980
  42. 4 2010 729
  43. end
  44. //判断是否小于行业中值(1—小于)
  45. qui sum r,d
  46. gen temp=r< r(p50)
  47. //连续片段分组:temp值发生变化,另计到下一组
  48. gen group=1  in 1
  49. replace group=group[_n-1]+(temp[_n-1]!=temp[_n])  if _n>1
  50. //统计分组个数
  51. bys group : gen count=_N
  52. replace count=0 if temp==0
  53. //按stkcd分组,统计个数的最大值为最终持续时间
  54. bys stkcd:egen wanted=max(count)
复制代码

藤椅
xinruizh 发表于 2020-11-11 10:47:13
您好,我复制代码在stata里试了一下,从这里开始报错,请问是什么情况?谢谢!

Screen Shot 2020-11-11 at 10.46.37 AM.png (92.86 KB)

Screen Shot 2020-11-11 at 10.46.37 AM.png

板凳
DΘstinyじò 发表于 2020-11-11 13:13:30
xinruizh 发表于 2020-11-11 10:47
您好,我复制代码在stata里试了一下,从这里开始报错,请问是什么情况?谢谢!
手动复制或者浏览器在兼容模式下点击复制代码按钮(360浏览器一类的浏览器)。
极速模式下点击复制代码按钮,会有一些不显示的特殊符号,影响代码运行。

报纸
xinruizh 发表于 2020-11-11 13:48:45
跟几位同学讨论了一下,想到了一个比较笨也比较简单的方法

//生成变量“绩效连续n年低于行业平均水平want”
//企业firm 年year(假设5年)某年某企业是否低于行业平均水平 temp(哑变量)
//定义面板数据
xtset firm year
//生成是否连续n年低于行业平均变量的哑变量
gen a=temp*l.temp
gen b=l2.temp*a
gen c=l3.temp*b
gen d=l4.temp*c
//生成最终连续变量want并不断replace
gen want=1 if temp==1
replace want=2 if a==1
replace want=3 if b==1
replace want=4 if c==1
replace want=5 if d==1
replace want=0 if want==.

地板
DΘstinyじò 发表于 2020-11-11 23:06:04
xinruizh 发表于 2020-11-11 13:48
跟几位同学讨论了一下,想到了一个比较笨也比较简单的方法

//生成变量“绩效连续n年低于行业平均水平wan ...
看了您的代码,我才明白了您想要的结果,之前理解的有点复杂了,还是上面的代码,删去最后一步,修改第三步的一个值,可以得到您想要的结果。
在有了temp——某年某企业是否低于行业平均水平的哑变量情况下:
  1. //数据排列整齐
  2. //xtset firm year
  3. //连续片段分组:temp值发生变化,另计到下一组
  4. gen group=1  in 1
  5. replace group=group[_n-1]+(temp[_n-1]!=temp[_n])  if _n>1
  6. //分组内部排序
  7. bys group : gen wanted=_n
  8. replace wanted=0 if temp==0
复制代码
可以理解上述的分组的方法的话,也可以跳过中间变量,直接得出结果。
  1. //方法二:
  2. gen wanted=0 if temp==0
  3. replace wanted=temp in 1
  4. replace wanted=1+wanted[_n-1]*(temp[_n-1]==temp[_n])  if _n>1 & wanted==.
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Sunknownay + 3 + 3 + 3 热心帮助其他会员

总评分: 学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

7
xinruizh 发表于 2020-12-19 22:15:06
DΘstinyじò 发表于 2020-11-11 23:06
看了您的代码,我才明白了您想要的结果,之前理解的有点复杂了,还是上面的代码,删去最后一步,修改第三 ...
谢谢!

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

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