Stata:重塑数据集 - 将变量标签引入变量值

时间:2014-04-14 15:03:29

标签: stata

我有一个数据集,其中包含在每个模拟中生成的不同产品值,具有以下布局:

+------------+-------+-------+-------+
| simulation |  v1   |  v2   |  v3   |
+------------+-------+-------+-------+
|          1 | 0,500 | 0,400 | 0,300 |
|          2 | 0,900 | 0,800 | 0,800 |
|          3 | 0,100 | 0,200 | 0,300 |
+------------+-------+-------+-------+

变量名称v1,v2,v3标记为产品ID,不会显示在数据集的标题中。我需要将此数据集重新整形为长格式,因此它需要:

+------------+----+----------+-------+
| simulation | id |  label   | value |
+------------+----+----------+-------+
|          1 | v1 | 01020304 | 0,500 |
|          1 | v2 | 01020305 | 0,400 |
|          1 | v3 | 01020306 | 0,300 |
|          2 | v1 | 01020304 | 0,900 |
|          2 | v2 | 01020305 | 0,800 |
|          2 | v3 | 01020306 | 0,800 |
|          3 | v1 | 01020304 | 0,100 |
|          3 | v2 | 01020305 | 0,200 |
|          3 | v3 | 01020306 | 0,300 |
+------------+----+----------+-------+

标准代码reshape long v , i(simulation) j(_count)在这种情况下不适用,因为我需要重新整形变量标签并将它们作为变量值保存在数据集中。想知道是否有办法用变量标签进行这种换位?

1 个答案:

答案 0 :(得分:5)

这里似乎只需要一个想法。如果您的变量标签会​​消失,请在reshape之前将它们保存在本地宏中,然后将其作为值标签应用。前面引用的FAQ给出了味道。

Sandpit参加比赛:

input simulation   v1     v2     v3   

    simulat~n         v1         v2         v3
1. 1  0.500  0.400  0.300 
2. 2  0.900  0.800  0.800 
3. 3  0.100  0.200  0.300 
4. end 

label var v1 "01020304"
label var v2 "01020305"
label var v3 "01020306"

示例代码:

forval j = 1/3 { 
    local labels `labels' `j' "`: var label v`j''"
} 


reshape long v, i(simulation)  
(note: j = 1 2 3)

Data                               wide   ->   long
-----------------------------------------------------------------------------
Number of obs.                        3   ->       9
Number of variables                   4   ->       3
j variable (3 values)                     ->   _j
xij variables:
                               v1 v2 v3   ->   v
-----------------------------------------------------------------------------

rename v value 
label def label `labels' 
rename _j label
gen id = label 
label val label label  


list 

     +----------------------------------+
     | simula~n      label   value   id |
     |----------------------------------|
  1. |        1   01020304      .5    1 |
  2. |        1   01020305      .4    2 |
  3. |        1   01020306      .3    3 |
  4. |        2   01020304      .9    1 |
  5. |        2   01020305      .8    2 |
     |----------------------------------|
  6. |        2   01020306      .8    3 |
  7. |        3   01020304      .1    1 |
  8. |        3   01020305      .2    2 |
  9. |        3   01020306      .3    3 |
     +----------------------------------+