【发布时间】:2021-04-08 10:16:49
【问题描述】:
我有一个包含许多变量的数据集。对于许多观察值,我想用基于唯一标识符的另一个观察值(对于相同变量)替换它们的值(在大量变量中)。唯一标识符不等于 Stata 观察编号 (_n)。
这类似于其他几个线程,但据我所知,它们的解决方案不是完全可移植的
- transfer values from one variable to another in Stata但我没有简单的词法关系 我可以使用
- https://www.stata.com/statalist/archive/2013-06/msg00056.html 但我不能依赖 Stata 的观察数字,因为数据集是动态的,观察的顺序和数量可能会发生变化。
这是基于第二个链接的解决方案的一段代码,但已针对我的问题进行了调整(我更改了最后一个宏中方括号的内容)。我知道这段代码不起作用,因为这里的方括号只能包含一个 Stata obs 编号 (_n)。但我认为这应该很好地说明我正在努力实现的目标:
在此示例中,我想将 unique_id 为 25 和 38 的观察值替换为 unique_id 为 21 的观察值。这应该对我本地 varlist 中的所有变量进行。
set obs 50
local vlist v1 v2 v3 v4 v5
foreach v of local vlist {
generate `v' = runiform()
}
gen unique_id=_n+20 // this is just to illustrate that the unique_id is not equal to _n
foreach var of local vlist {
replace `var' =`var'[unique_id==21] if unique_id==25 | unique_id==38
}
【问题讨论】:
-
该语法是合法的,但不是您通常想要的。
unique_id == 21如果为真,则为 1,如果为假,则为 0。当且仅当数据之前已对数据进行排序以使unique_id在第一次观察中为 21 时,对 varname[1]的引用才是您想要的,因此下标是正确的。否则,Stata 在这方面不是 R!使用的语法不是选择标量的方法
标签: replace stata stata-macros