【问题标题】:Looping in Stata through pairs of strings通过成对的字符串在Stata中循环
【发布时间】:2013-03-01 22:09:07
【问题描述】:

我正在尝试设置一个等于状态 fips 代码的变量,因为它具有状态缩写。除了:

之外,还有更短的方法吗?

如果 other_variable=="[state_abbrev]",则替换 fips = "[fips code]"

我目前有 50 行。我想创建一个循环,但鉴于我有两个不断变化的值,我不知道如何避免循环遍历每个排列。

【问题讨论】:

  • 尼克的解决方案是我相信Stata希望你做的,里卡多举了一个例子。避免循环是个好主意。
  • 我猜原始发帖人对同时循环遍历两个列表感到困惑。 stata-journal.com/sjpdf.html?articlenum=pr0009 中对此进行了一般性讨论(参见第 3 节)。底线是您需要以某种方式拼出等价的 AL Alabama 等。 (一个完全不同的评论是,原始发布者假设“我们”显然都在美国并且知道大约 50 个州和 fips 代码。不难猜测他的上下文,但这是一个国际论坛!)

标签: loops stata


【解决方案1】:

这是FAQ 中涵盖的策略示例。

1) 创建一个包含两个变量的数据集:状态名称和关联的 fips 代码。为了使这稍微灵活一些,我包含了州名的常用半缩写。将来,您可以添加包含两个字母的州缩写的第三个变量。

clear
input fips str20 state
1 "alabama"
2 "alaska"
4 "arizona"
5 "arkansas"
6 "california"
8 "colorado"
9 "connecticut"
10 "delaware"
11 "district of columbia"
12 "florida"
13 "georgia"
15 "hawaii"
16 "idaho"
17 "illinois"
18 "indiana"
19 "iowa"
20 "kansas"
21 "kentucky"
22 "louisiana"
23 "maine"
24 "maryland"
25 "massachusetts"
26 "michigan"
27 "minnesota"
28 "mississippi"
29 "missouri"
30 "montana"
31 "nebraska"
32 "nevada"
33 "new hampshire"
34 "new jersey"
35 "new mexico"
36 "new york"
37 "north carolina"
37 "n. carolina"
38 "north dakota"
38 "n. dakota"
39 "ohio"
40 "oklahoma"
41 "oregon"
42 "pennsylvania"
44 "rhode island"
45 "south carolina"
45 "s. carolina"
46 "south dakota"
46 "s. dakota"
47 "tennessee"
48 "texas"
49 "utah"
50 "vermont"
51 "virginia"
53 "washington"
54 "west virginia"
54 "w. virginia"
55 "wisconsin"
56 "wyoming"
72 "puerto rico"
end

save statefips, replace

2) 加载包含状态名称变量的主数据集,并使用 statefips.dta 执行 多对一 合并。

sysuse census, clear

// Convert the state names to lowercase to ensure
// consistency with the statefips dataset
replace state = lower(state)

merge m:1 state using statefips.dta

drop if _merge == 2
drop _merge

如果您想保留主数据集中状态名称的大小写,您可以简单地生成一个临时变量并将其用于合并,即

gen statelower = lower(state)
merge m:1 statelower using statefips.dta

此外,一旦您创建了 statefips.dta 数据集,就无需在每次要执行合并时重新创建它。您可以简单地将它与您的项目文件捆绑在一起,并在必要时使用它。如果您发现要添加两个字母的状态缩写或进行一些其他更改,那么几乎可以立即重新创建它。

【讨论】:

  • 您可以使用keep() 选项指定要保留的合并部分。见h merge
  • @Fr.对,像这样:merge m:1 state using statefips.dta, keep(3)
【解决方案2】:

没有明显的捷径,但在Stata中

 . search merge, faq

查找 Kit Baum 的相关常见问题解答。

【讨论】:

  • 我相信 Stata 希望用户这样做。
猜你喜欢
  • 1970-01-01
  • 2013-11-23
  • 1970-01-01
  • 2017-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
  • 1970-01-01
相关资源
最近更新 更多