2013-03-01 245 views
2

我想设置一个变量等于状态fips代码给定其状态缩写。有一个较短的方式做到这一点以外:在stata中通过字符串对循环

取代FIPS = “[FIPS代码]” 如果other_variable == “[state_abbrev]”

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

+0

尼克的解决方案是我相信斯塔塔希望你做的,里卡多举了一个例子。避免循环是一个好主意。 – 2013-03-03 11:53:49

+1

我想原始的海报是困惑的同时循环两个列表。在http://www.stata-journal.com/sjpdf.html?articlenum=pr0009中有一个一般的讨论(参见第3节)。最重要的是,你需要以某种方式明确阿拉巴马州的等效AL <->等。 (一个完全不同的评论是,原始海报假设显然“我们”都在美国,并且知道大约50个州和代码,猜测他的背景并不难,但这是一个国际论坛!) – 2013-03-05 10:56:10

回答

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

+1

您可以指定要使用'keep()'选项保留的合并部分。参见'h merge'。 – 2013-03-03 11:51:42

+1

@Fr。对,就像这样:'使用statefips.dta合并m:1状态,保留(3)' – 2013-03-03 14:13:44

2

无明显快捷,但在Stata

. search merge, faq 

来查找包鲍姆相关的常见问题。

+0

我相信Stata希望用户这样做。 – 2013-03-03 11:52:12