楼主: smztsmzt
1063 0

[学习心得] 【学习心得】 同一行多个变量向前或向后依次移动相同位数 [推广有奖]

  • 0关注
  • 9粉丝

硕士生

3%

还不是VIP/贵宾

-

威望
0
论坛币
2959 个
通用积分
406.3466
学术水平
73 点
热心指数
72 点
信用等级
62 点
经验
1206 点
帖子
51
精华
0
在线时间
130 小时
注册时间
2011-4-7
最后登录
2024-7-25

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
数据清理中,有时候会遇到需要将某一行多个变量向前或向后依次移动相同位数,在excel中操作非常方便,但是由于手工操作,其步骤无法记录、追溯和复制,因此,以下代码在stata中实现类似的操作。

Stata目前没有直接提供数组,加之个人水平有限,代码有些冗长,如果有更精简的方法还望各位网友不吝赐教,谢谢。
同一行多个变量向前依次移动1位.do (1.24 KB)


  1. /*****************************
  2. Example 同一行多个变量向前依次移动1位
  3. Date: 2019-12-04
  4. Author: YPP
  5. Version: 1.0
  6. *****************************/

  7. // 1. 数据生成过程
  8. clear
  9. set obs 10

  10. gen temp=.
  11. gen str a1="Boy"
  12. gen a2=1
  13. gen a3=2
  14. gen str a4="中国"
  15. gen a5=3

  16. // 2. 移动过程
  17. local varlist1 "temp a1 a2 a3 a4 a5" // 存储需要操作的变量名称,注意变量顺序
  18. local len_varlist1 =wordcount("`varlist1'") // 计算操作的变量个数

  19. // 如果变量不同类型 则将所有变量全部转换为字符型
  20. tostring `varlist1',replace

  21. // 生成一个临时变量 存储需要操作的变量名称 作用类似于数组
  22. // 当前数据集中的记录数应大于需要操作的变量数
  23. gen str temp_var=""
  24. local i=1
  25. foreach var1 of local varlist1 {        
  26.         replace temp_var="`var1'" in `i'
  27.         local i=`i'+1
  28. }

  29. // 连续生成两个局部变量 向前移动1位
  30. forvalues j=1(1)`=`len_varlist1'-1' { // 循环计数时注意不要越界
  31.         local pre_var=temp_var[`j']
  32.         local post_var=temp_var[`j'+1]
  33.         replace `pre_var' = `post_var' in 4 // 指定将第4行向前移动1位
  34. }

  35. // 将最后1个需要操作的变量 默认置为缺失
  36. local last_var=temp_var[`len_varlist1']
  37. replace `last_var'="" in 4
  38. drop temp_var
复制代码

二维码

扫码加我 拉你入群

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

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


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

本版微信群
加好友,备注jltj
拉您入交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-9-19 20:58