楼主: onsangwong
3695 8

[编程问题求助] 求赐教有关stata循环语句!!累计统计方法! [推广有奖]

  • 4关注
  • 2粉丝

已卖:170份资源

博士生

29%

还不是VIP/贵宾

-

威望
0
论坛币
469 个
通用积分
13.4208
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
3961 点
帖子
198
精华
0
在线时间
296 小时
注册时间
2020-1-10
最后登录
2022-3-30

楼主
onsangwong 学生认证  发表于 2020-7-13 17:40:35 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
想求助一下如何解决累计的问题!!不知道是否应该用到循环语句?是的话应该如何写命令呢?求大神们赐教!
数据说明 想要统计企业截止至统计节点存在连续多少年投资亏损。例如:企业2在统计节点2005年之前(不包括该统计年份的状况)存在着连续5年的投资亏损,因此2005年对应的统计结果为5。
统计节点:即在该年份之前存在着连续多少年是投资亏损的。
投资收益:0为盈利、1为亏损!
最终想要得到两种不同的统计的结果,分别为统计方法1,统计方法2。
统计方法1:统计节点后的累计需要重新进行统计;
统计方法2:统计节点后不需要重新进行累计统计。


不知道我描述的是否清晰了,麻烦大神们可以直接看看我想要的结果(统计方法1&2)!
----------------------- copy starting from the next line -----------------------
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input int year byte(企业代码 统计节点 投资收益 统计方法1 统计方法2)
  4. 2000 1 0 1 0 0
  5. 2001 1 0 1 1 1
  6. 2002 1 0 1 2 2
  7. 2003 1 0 1 3 3
  8. 2004 1 0 1 4 4
  9. 2005 1 1 1 5 5
  10. 2006 1 0 1 1 6
  11. 2007 1 0 0 2 7
  12. 2008 1 0 1 0 0
  13. 2009 1 0 0 1 1
  14. 2010 1 0 1 0 0
  15. 2011 1 0 1 1 1
  16. 2012 1 1 0 2 2
  17. 2013 1 0 1 0 0
  18. 2014 1 0 1 1 1
  19. 2015 1 0 0 2 2
  20. 2000 2 0 1 0 0
  21. 2001 2 0 1 1 1
  22. 2002 2 1 1 2 2
  23. 2003 2 0 1 1 3
  24. 2004 2 0 1 2 4
  25. 2005 2 0 0 3 5
  26. 2006 2 1 0 0 0
  27. 2007 2 0 0 0 0
  28. 2008 2 0 0 0 0
  29. 2009 2 0 1 0 0
  30. 2010 2 0 0 1 1
  31. 2011 2 0 1 0 0
  32. 2012 2 1 0 1 1
  33. 2013 2 0 0 0 0
  34. 2014 2 0 0 0 0
  35. 2015 2 0 1 0 0
  36. end
复制代码

------------------ copy up to and including the previous line ------------------


二维码

扫码加我 拉你入群

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

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

关键词:Stata 循环语句 统计方法 tata including Stata 循环 数据处理 命令 语句 Stata 循环 数据处理 命令 语句

回帖推荐

DΘstinyじò 发表于6楼  查看完整内容

根据您的思路回答一下楼主问题。 为了方便运算,定义变量名如下 year:时间 id:企业代码 jd:统计节点 r:投资收益 year id jd r 2000 1 0 1 提到问题可用以下代码尝试。关于非平衡面板的问题,可以加一个辅助序列,方便tsspell命令的实现和后续算法的顺畅。

沙发
onsangwong 学生认证  发表于 2020-7-13 18:04:30
还有个问题想补充!
如何根据企业分组剔除首个统计节点之前以及最后一个统计节点之后的数据呢?即保留首次统计节点和最后一个统计节点之间的数据。例如企业3保留的数据为2005-2012年的数据;企业4则保留2002-2015年的数据
示例数据如下!
----------------------- copy starting from the next line -----------------------
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input int year byte(企业代码 统计节点)
  4. 2000 3 0
  5. 2001 3 0
  6. 2002 3 0
  7. 2003 3 0
  8. 2004 3 0
  9. 2005 3 1
  10. 2006 3 0
  11. 2007 3 0
  12. 2008 3 0
  13. 2009 3 0
  14. 2010 3 0
  15. 2011 3 0
  16. 2012 3 1
  17. 2013 3 0
  18. 2014 3 0
  19. 2015 3 0
  20. 2000 4 0
  21. 2001 4 0
  22. 2002 4 1
  23. 2003 4 0
  24. 2004 4 0
  25. 2005 4 0
  26. 2006 4 1
  27. 2007 4 0
  28. 2008 4 0
  29. 2009 4 0
  30. 2010 4 0
  31. 2011 4 0
  32. 2012 4 1
  33. 2013 4 0
  34. 2014 4 0
  35. 2015 4 1
  36. end
复制代码

------------------ copy up to and including the previous line ------------------

藤椅
黃河泉 在职认证  发表于 2020-7-13 19:37:01
onsangwong 发表于 2020-7-13 18:04
还有个问题想补充!
如何根据企业分组剔除首个统计节点之前以及最后一个统计节点之后的数据呢?即保留首次 ...
统计方法2:
  1. xtset 企业代码 year
  2. // ssc install tsspell
  3. tsspell 投资收益
  4. bys 企业代码 _spell: gen a = sum(投资收益)
  5. sort 企业代码 year
  6. gen wanted2 = L.a
  7. replace wanted2 = 0 if wanted2 == .
  8. *order wanted2, after(统计方法2)
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Sunknownay + 3 + 3 + 3 热心帮助其他会员

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

板凳
没锈氏殊 发表于 2020-7-13 20:12:06
提示: 作者被禁止或删除 内容自动屏蔽

报纸
onsangwong 学生认证  发表于 2020-7-13 22:14:43
黃河泉 发表于 2020-7-13 19:37
统计方法2:
非常感谢您的回复~
实际上该数据是非平衡面板数据,并不是每个企业都是从2000-2015年这个跨度的,我自己举例的数据集没有说清楚这个问题不好意思!那么也能用以上命令嘛?

还请老师赐教另外两个问题,辛苦您了,感谢感谢!

地板
DΘstinyじò 发表于 2020-7-14 13:01:59
黃河泉 发表于 2020-7-13 19:37
统计方法2:
根据您的思路回答一下楼主问题。
为了方便运算,定义变量名如下
year:时间
id:企业代码
jd:统计节点
r:投资收益
year        id        jd        r
2000        1        0        1
提到问题可用以下代码尝试。关于非平衡面板的问题,可以加一个辅助序列,方便tsspell命令的实现和后续算法的顺畅。
  1. bys id (year): gen i_year=_n
  2. xtset id i_year
  3. tsspell r
  4. ///统计1
  5. bys id: gen aa = sum(jd)
  6. bys id aa _spell: gen a1 = sum(r)
  7. sort id i_year
  8. gen wanted1 = L.a1
  9. replace wanted1 = 0 if wanted1 == .
  10. ///统计2
  11. bys id _spell: gen a2 = sum(r)
  12. sort id i_year
  13. gen wanted2 = L.a2
  14. replace wanted2 = 0 if wanted2 == .
  15. ///保留符合节点的数据
  16. bys id: drop if aa==0
  17. bys id: egen aaa=max(aa)
  18. bys id: drop if aa==aaa & jd==0
  19. keep year id  jd r wanted1 wanted2
复制代码
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
Sunknownay + 3 + 3 + 3 热心帮助其他会员
黃河泉 + 5 + 5 + 5 精彩帖子

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

7
onsangwong 学生认证  发表于 2020-7-15 15:14:54
DΘstinyじò 发表于 2020-7-14 13:01
根据您的思路回答一下楼主问题。
为了方便运算,定义变量名如下
year:时间
太厉害了!!想问下大神您的编程怎么学的,我觉得自己实在是太渣了,羡慕呜呜呜

8
onsangwong 学生认证  发表于 2020-7-15 15:29:02
onsangwong 发表于 2020-7-15 15:14
太厉害了!!想问下大神您的编程怎么学的,我觉得自己实在是太渣了,羡慕呜呜呜
或者能不能请您具体讲讲统计1的思路呢!感谢您!

9
DΘstinyじò 发表于 2020-7-15 21:31:57 来自手机
onsangwong 发表于 2020-7-15 15:29
或者能不能请您具体讲讲统计1的思路呢!感谢您!
我也就是个入门级的人,之前就是看了stata的视频,像连玉君老师的视频。<br>
统计1的思路,也是参照黄老师给的统计2的思路,区别在于统计1遇到节点时候要重新开始计数,也就是要根据节点重新细化类别。

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

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