通过成对的字符串在Stata中循环

时间:2013-03-01 22:09:07

标签: loops stata

我试图在给定状态缩写的情况下设置一个等于状态fips代码的变量。除了:

之外还有更短的方法吗?

如果other_variable ==“[state_abbrev]”

,则替换fips =“[fips code]”

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

2 个答案:

答案 0 :(得分:2)

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

 . search merge, faq

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

答案 1 :(得分:2)

以下是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数据集,就无需在每次要执行合并时重新创建它。您可以将它与项目的文件捆绑在一起,并在必要时使用它。如果您发现要添加两个字母的州缩写或进行其他更改,那么重新创建它几乎是即时的。