通过从多个变量中进行选择来生成新变量

时间:2014-02-12 13:28:10

标签: stata

我有一些关于疾病和诊断年龄的数据。每个参与者被问及他们患有哪些疾病以及疾病被诊断的年龄。 有一组变量disease1-28,每种疾病都有一个数字代码,另一组age1-28,诊断年龄为几年。根据召回的顺序将疾病置于连续变量中;诊断年龄放在适当的年龄变量中。

我想为几种疾病中的每一种产生一个新的变量,给出该疾病的诊断年龄:例如asthma_age_at_diagnosis

我可以在没有28个replace陈述的情况下这样做吗?

数据示例:

+-------------+----------+----------+----------+------+------+------+  
| Participant | Disease1 | Disease2 | Disease3 | Age1 | Age2 | Age3 |  
+-------------+----------+----------+----------+------+------+------+    
|           1 |      123 | 3        | .        |   30 | 2    | .    |  
|           2 |      122 | 123      | 5        |   23 | 51   | 44   |  
|           3 |        5 | .        | .        |   50 | .    | .    |  
+-------------+----------+----------+----------+------+------+------+  

1 个答案:

答案 0 :(得分:0)

我提出了一个通常的提示,即没有任何自己的代码的这种形式的问题通常被认为是Stack Overflow的主题。尽管如此,这里的Stata用户仍然是回答Stata问题的人(惊喜),如果有趣且有意义,我们通常会放纵这样的问题。

我建议使用不同的数据结构。使用您的示例数据

clear 
input Patient Disease1 Disease2 Disease3 Age1 Age2 Age3 
1 123 3 . 30 2 . 
2 122 123 5 23 51 44 
3 5 . . 50 . . 
end 

你可以reshape

reshape long Disease Age, i(Patient) j(Order)
drop if missing(Disease)
list, sep(0) 

   +--------------------------------+
   | Patient  Order   Disease   Age |
   |--------------------------------|
1. |       1      1       123    30 |
2. |       1      2         3     2 |
3. |       2      1       122    23 |
4. |       2      2       123    51 |
5. |       2      3         5    44 |
6. |       3      1         5    50 |
   +--------------------------------+

使用此表单中的数据,您现在可以轻松回答许多问题。我没有看到一大堆新变量会使许多分析更容易。另一种看待这种情况的方法是你暗示疾病编码的顺序是任意的;如此,将数据结构连接到不明智的地方。即使订单很重要,它仍然可以作为数据集(变量Order)的一部分进行访问。

提示:如果您仍然需要单独的变量用于某些目的,请查看separate