2017-09-15 111 views
-1

我的数据集如下。如何将偶数行添加到奇数行?

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

拼写是Stata。 30多年来它一直不是STATA。 –

回答

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) 
相关问题