2

鉴于其状态缩写,我正在尝试设置一个等于状态 fips 代码的变量。除了:

如果 other_variable=="[state_abbrev]" 则替换 fips = "[fips 代码]"

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

4

2 回答 2

2

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

 . search merge, faq

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

于 2013-03-02T14:11:47.077 回答
2

这是常见问题解答中涵盖的策略示例。

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

于 2013-03-02T14:29:03.237 回答