我有三个变量varA,varB和varC 我试图先取代"失踪"在所有三个变量中使用NA,然后为所有三个变量添加标签。
首先我替换了#34;缺少"与NA:
local mylist1 varA-varC
foreach v1 of varlist `mylist1' {
replace `v1'="NA" if `v1' =="missing"
}
现在,如果我想再次调用列表,将相同的标签添加到所有三个变量中:
foreach v1 of varlist `mylist1' {
label var `v1' "testvaraible"
}
但我会收到一条错误消息:
varlist required
有人可以解释为什么我无法回想起这份名单吗?
答案 0 :(得分:1)
对于你的第一个例子,如果所涉及的变量都是字符串,那么这将是合法的语法:
local mylist1 varA-varC
foreach v of varlist `mylist1' {
replace `v' = "NA" if `v' == "missing"
}
注意引用本地宏(不同的左右引号)的不同标点符号以及放置大括号的区别。
在第二个例子中甚至很难计算出你想要的东西,但是循环超过了你在循环中从不引用的本地宏v
的不同值。此外,根据未指定的局部宏testvaraible
[原文如此]的定义,仍然令人费解的是为什么要相同地标记三个变量。
如果没有回答这个问题,您可能需要更加明确地了解您的数据以及您想要的确切内容。特别是,我们无法查看本地宏v1
和testvaraible
的定义。
答案 1 :(得分:1)
在针对前一个答案的讨论做出的编辑后,我参加了这个讨论。此时,复制代码现在位于原始帖子中,问题显然已得到纠正。讨厌发布这个作为答案,但是评论显然太长了。
. set obs 1
obs was 0, now 1
. generate str8 varA = "a"
. generate str8 varB = "missing"
. generate str8 varC = "c"
. local mylist1 varA-varC
. foreach v1 of varlist `mylist1' {
2. replace `v1'="NA" if `v1' =="missing"
3. }
(0 real changes made)
(1 real change made)
(0 real changes made)
. foreach v1 of varlist `mylist1' {
2. label var `v1' "testvariable"
3. }
. list, clean noobs
varA varB varC
a NA c
. describe
Contains data
obs: 1
vars: 3
size: 24
------------------------------------------------------------------------------------------------
storage display value
variable name type format label variable label
------------------------------------------------------------------------------------------------
varA str8 %9s testvariable
varB str8 %9s testvariable
varC str8 %9s testvariable
------------------------------------------------------------------------------------------------
Sorted by:
Note: dataset has changed since last saved
.