2011-07-19 350 views
3

我在工作中遇到了一个问题:我合并了两个数据集,并且有许多变量具有相同的内容,但是其中有一个变量值为数据集1在数据集2中有一个缺失值。所以我需要将这个变量的值传递给另一个变量。在Stata中将数值从一个变量传递到另一个变量

这是迄今为止我最好的拍摄:

replace V23=1 if V232==1 
replace V23=2 if V232==2 
replace V23=3 if V232==3 
replace V23=4 if V232==4 
replace V23=8 if V232==8 
replace V23=.u if V232==10 | V232==9 

然而,这是一个繁琐的任务做就是40个+变量 - 和,因为他们中的一些数值变量,它变成了一个永远做不完的任务。

回答

2

这里是一个开始:

foreach v of varlist v23 { 
    local w `v'2 
    replace `v' = `w' if missing(`v') 
    replace `v' = .u if `w' == 10 | `w' == 9 
} 

注意此解决方案依赖于变量名中的词汇关系:它假定旧变量“V23”与新变量“v232”相关联。您可以列出这些关联并使用它们,但这很不方便。如果需要,重命名这些变量可能更容易,以符合这种约定,然后运行替换脚本,然后恢复所需的名称。

如果您不熟悉这种自动化,请阅读帮助页面macroforeach

+0

你先生,太棒了!我仍然错过了一些理解,以充分理解这一点。它适用于一个变量,但以下两个(一个数字,一个类似于第一个工作的类别)并没有那么好。我不明白的是: 1)什么是词汇关系?它最常用于语义学,我不能将这些知识转化为编程。 2)我根本不了解当地的w'v'2线。我认为这与我不知道如何将所需的变量与值“w”(在上述情况下为V232)绑定到变量V23中,值为v。 – emilBeBri

+0

@Emil w通过连接v之后的字符“2”。例如,当v是“xyz”时,则w将是“xyz2”。 – whuber

+0

来到这里告诉你,我刚才明白了我自己!只花了3小时=)。我现在明白了,谢谢! – emilBeBri

相关问题