loops - 将一个变量的值替换为其他变量的值 Stata 13

标签 loops for-loop foreach stata

我是第一次使用 Stata。直到这周我才使用它,我正在尝试通过一些例子来工作。我有以下一组数据:

contruse | educ_none | educ_prim | educ_secabove
1        | 0         | 1         | 0
0        | 1         | 0         | 0
...

我用相应的数据集创建了以下变量,这样我就可以tab contruse 所有不同的教育。

gen education=0
replace education=1 if educ_none==1
replace education=2 if educ_prim==1
replace education=3 if educ_secabove==1
replace education=. if educ_none==. | educ_prim==. | educ_secabove==.
tab education, missing

contruse | educ_none | educ_prim | educ_secabove | education
1        | 0         | 1         | 0             | 2
0        | 1         | 0         | 0             | 1

基本上有没有更好的方法来做到这一点:例如我的 varlist 可以任意大并且执行上述操作很痛苦。有没有一种方法可以说反转以下内容以处理多个变量并为单个变量赋值?

foreach x of varlist educ_none educ_prim educ_secabove {
    replace `x' = . if var > 3
}

最佳答案

你能自动化这个过程吗? 答案是“否”,因为每个组件变量都会有一个唯一的后缀。因此,如果您有“race_black”、“race_hisp_nonw”、“race_white”,例如,您不能以相同的方式处理“education”和“race”变量。您还将为每个变量分配唯一的值标签。 请参阅下面的第二个答案

另外两个问题:

  1. 看了你的例子,好像是为了教育 正好是三类。所以你正在初始化 一个不存在的类别。

  2. 您对缺失的处理可能不正确。 您已将教育设置为缺失,如果其任何组成部分 不见了。有可能面试官正确地将其中一个组成变量编码为“1”并离开了 其他值本应编码为“0”时为空白(缺失)。不应设置针对该观察的教育 想念。

这是我对代码的看法:

set linesize 100
clear
input id educ_none educ_prim educ_secabove
1 0 1 0
2 1 0 0
3 0 0 1
4 . 1 .    /* Okay */
5 . . .    /* Really Missing */
6 0 0 0    /* Really Missing */
7 . 1 1    /* Illegal */
end

egen etot = rowtotal(educ_*) /* = 1 for valid values */
foreach x of varlist educ_* {
/* Tentatively fix incorrect missings */
    replace `x'= 0 if `x'==. & etot==1
    }
list
gen   education = 1 if educ_none==1
replace education=2 if educ_prim==1
replace education=3 if educ_secabove==1


/* Assign extended missing for illegal values*/
replace education = .a if etot >1 & etot<.
#delim ;
label define educl
    1 "None"
    2 "Primary"
    3 "Secondary+"
    .a  ">1 indicator is 1"
 ;
#delim cr
label values education educl
list
tab education, missing

关于loops - 将一个变量的值替换为其他变量的值 Stata 13,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23964924/

相关文章:

php - 罗马数字转整数函数

c++ - 在C++中定义一个 'for'循环宏

ios - cocos2d 的无限循环

java - 在for循环中添加列表/数组元素,java12

javascript - jQuery 函数从另一个 HTML 表创建 HTML 表

php - Mysql - 统计结果并按降序显示

Javascript forEach 返回值插入字符串

c# - 如何遍历字典?

database - Codeigniter - 循环发布信息传递值到模型查询并输出结果

javascript - 如何使用变量在 for 循环中递增或递减?