我的数据集如下。
1. ZARA. cotton. 35. 28. 27. 350. 0
2. 125. 3200. 1. 5. 32. 41
3. Mango. nylon. 35. 27. 28. 320. 0
4. 125. 3050. 1. 5. 33. 40
等等。
我想使用Stata将偶数行移动到奇数行。
想想用
loop {
i = 1
move 2i th row to 2i-1th row
i = i + 1
if i= 2k
finish }
答案 0 :(得分:0)
关于您的变量是字符串还是数字以及与什么对齐的内容存在一些歧义(意思是缺乏信息),并且您不提供变量名称。因此,这不符合最小,完整和可验证的例子。见https://stackoverflow.com/help/mcve但这种技术可能有所帮助。我不会明确地循环观察(不是行:Stata不是电子表格)。
* Example generated by -dataex-. To install: ssc install dataex
clear
input str6 v1 str7 v2 str5 v3 str3(v4 v5) str4 v6 str2 v7
"ZARA." "cotton." "35." "28." "27." "350." "0"
"" "125." "3200." "1." "5." "32." "41"
"Mango." "nylon." "35." "27." "28." "320." "0"
"" "125." "3050." "1." "5." "33." "40"
end
quietly forval j = 8/13 {
local i = `j' - 6
gen v`j' = v`i'[_n+1] if mod(_n, 2) == 1
}
drop if mod(_n, 2) == 0
list
+---------------------------------------------------------------------------+
1. | v1 | v2 | v3 | v4 | v5 | v6 | v7 | v8 | v9 | v10 | v11 |
| ZARA. | cotton. | 35. | 28. | 27. | 350. | 0 | 125. | 3200. | 1. | 5. |
|---------------------------------------------------------------------------|
| v12 | v13 |
| 32. | 41 |
+---------------------------------------------------------------------------+
+---------------------------------------------------------------------------+
2. | v1 | v2 | v3 | v4 | v5 | v6 | v7 | v8 | v9 | v10 | v11 |
| Mango. | nylon. | 35. | 27. | 28. | 320. | 0 | 125. | 3050. | 1. | 5. |
|---------------------------------------------------------------------------|
| v12 | v13 |
| 33. | 40 |
+---------------------------------------------------------------------------+
这里
_n
是运行1的观察数。
mod(_n, 2)
是将观测数除以2的余数,因此对于奇数而言为1,对于偶数则为0。
你可能希望destring
无论是什么字符串,但都应该是数字。
编辑这是另一种方法,但它取决于所有变量是字符串。
clear
input str6 v1 str7 v2 str5 v3 str3(v4 v5) str4 v6 str2 v7
"ZARA." "cotton." "35." "28." "27." "350." "0"
"" "125." "3200." "1." "5." "32." "41"
"Mango." "nylon." "35." "27." "28." "320." "0"
"" "125." "3050." "1." "5." "33." "40"
end
gen long id = _n
gen odd = mod(_n, 2)
reshape long v, i(id) j(varno)
replace id = ceil(id/2)
replace varno = varno + 6 if !odd
drop if missing(v)
drop odd
reshape wide v, i(id) j(varno)