@Pearly Spencer 合理地专注于您遇到的问题,即如何获取特定变量。我会更进一步,并建议你应该reshape long
而不是reshape
返回。您的数据看起来像面板或纵向数据,最好保留long
。您的问题很典型:即使是简单的问题,对于长数据,通常也需要具有广泛布局(结构、格式)的尴尬答案。也有例外,主要是有人编写了一个egen
函数来按行做某事。如需更长时间的讨论,请参阅本文。
我的其余答案显示了两种通过循环从现有布局中获取所需内容的方法。对于具有许多变量的真实数据,不必输入所有变量的名称:还有其他方法可以做到这一点,但如何做到最好取决于您的真实姓名,而您不需要告诉我们。
clear
input var2000 var2001 var2002 Num_change
3 2 1 2
4 4 4 0
1 0 0 1
1 0 1 2
end
* 1
local vars var2000 var2001 var2002
gettoken first vars : vars
gen wanted = 0
quietly while "`vars'" != "" {
gettoken next vars : vars
replace wanted = wanted + (`next' != `first')
local first `next'
}
* 2
local vars var2000 var2001 var2002
gen WANTED = 0
tokenize `vars'
local nvars : word count `vars'
quietly forval j = 2/`nvars' {
local i = `j' - 1
replace WANTED = WANTED + (``j'' != ``i'')
}
list
+----------------------------------------------------------+
| var2000 var2001 var2002 Num_ch~e wanted WANTED |
|----------------------------------------------------------|
1. | 3 2 1 2 2 2 |
2. | 4 4 4 0 0 0 |
3. | 1 0 0 1 1 1 |
4. | 1 0 1 2 2 2 |
+----------------------------------------------------------+