Stata目前没有直接提供数组,加之个人水平有限,代码有些冗长,如果有更精简的方法还望各位网友不吝赐教,谢谢。
- /*****************************
- Example 同一行多个变量向前依次移动1位
- Date: 2019-12-04
- Author: YPP
- Version: 1.0
- *****************************/
- // 1. 数据生成过程
- clear
- set obs 10
- gen temp=.
- gen str a1="Boy"
- gen a2=1
- gen a3=2
- gen str a4="中国"
- gen a5=3
- // 2. 移动过程
- local varlist1 "temp a1 a2 a3 a4 a5" // 存储需要操作的变量名称,注意变量顺序
- local len_varlist1 =wordcount("`varlist1'") // 计算操作的变量个数
- // 如果变量不同类型 则将所有变量全部转换为字符型
- tostring `varlist1',replace
- // 生成一个临时变量 存储需要操作的变量名称 作用类似于数组
- // 当前数据集中的记录数应大于需要操作的变量数
- gen str temp_var=""
- local i=1
- foreach var1 of local varlist1 {
- replace temp_var="`var1'" in `i'
- local i=`i'+1
- }
- // 连续生成两个局部变量 向前移动1位
- forvalues j=1(1)`=`len_varlist1'-1' { // 循环计数时注意不要越界
- local pre_var=temp_var[`j']
- local post_var=temp_var[`j'+1]
- replace `pre_var' = `post_var' in 4 // 指定将第4行向前移动1位
- }
- // 将最后1个需要操作的变量 默认置为缺失
- local last_var=temp_var[`len_varlist1']
- replace `last_var'="" in 4
- drop temp_var