2013-09-30 25 views
1

我有一个目前看起来像这样的代码:塔塔:用绳子来代替数值高效的路值

replace fname = "JACK" if id==103 
replace lname = "MARTIN" if id==103 

replace fname = "MICHAEL" if id==104 
replace lname = "JOHNSON" if id==104 

而且持续了多页这样,与第一和最后一个名称替换ID名称串。我想知道是否有更有效的方法来做到这一点,也许通过使用recode命令?

回答

1

我会回应其他答案,暗示merge是做到这一点的最佳方法。

但是,如果你绝对必须按项目编码(再次混乱),你可以通过使用MS Excel“帮助”你编写代码来生成一个长列表(“页面”)replace命令。这是您的Excel工作表的一个例子的画面,显示了MS Excel公式:

 columns: 
      A   B  C  D 
row: 1 last  first id code 
    2 MARTIN JACK 103 ="replace fname=^"&B2&"^ if id=="&C2 

你的那种类型,确保它看起来像塔塔代码时,公式计算(除了插入记号),然后复制D列中的公式直到列表的末尾。然后将由公式生成的D列中的Stata代码块复制到你的do文件中,然后做一个查找和替换(如果你在其他地方使用插入符号进行数学运算,请小心)!!与“,这将最终产生适当的Stata语法

(这是一个真正的蛮力方式,这样做是不太动态的,因为你的世代列表随后发生变化。提前回答一个问题,在这里主张使用Excel :))

0

创建IDS VS FNAME的关联数组,L-NAME

103 => JACK,MARTIN 
104 => MICHAEL,JOHNSON 
... 

替换 ID =>散列{ID}(FNAME & L-NAME)

这样做的效率将由被照顾使用的编程语言

+0

如何在Stata中创建'关联数组'?我从来没有见过这样的语法 – Parseltongue

+0

原理很好,请注意,这不是,也不是呈现为,任何种类的Stata语法。 –

+0

只有在您的情况下,该原理才能高效工作有一个矢量化的'粘贴'函数来连接而不循环。不记得Stata是否这样做 - 它不在'h string_functions'中。所有这些当然都是为了摆脱好的“字典”策略(尼克的回答)。 –

0

你没有解释你想添加的字符串来自哪里,但通常最好的技术是什么在

http://www.stata.com/support/faqs/data-management/group-characteristics-for-subsets/index.html

+0

我不习惯将它作为一个单独的文件 - 它增加了与同事发生错误的可能性。你知道如何实施Ram的战略吗? – Parseltongue

+0

合并过程可能是最快的解决方案。您始终可以为同事保存并提供合并的数据文件,从而使他们无需重复此操作。 –

+0

我不明白如何使用单独的文件比直接输入字符串更容易出错。无论哪种方式,这正是@拉姆的策略。 –