2013-03-01 1 views
2

상태 약어가 주어진 상태 코드와 동일한 변수를 설정하려고합니다. 이 다른 것보다 할 수있는 짧은 방법이 :문자열 쌍을 통해 Stata에서 반복하기

는 FIPS를 교체 = "[FIPS 코드]"만약 내가 현재의 50 개 라인을 가지고 other_variable == "[state_abbrev]"

. 루프를 만들고 싶습니다. 그러나 두 개의 값이 변하기 때문에 모든 순열을 반복하지 않는 방법을 모르겠습니다.

+0

닉의 해결책은 스타타가 당신이하기를 원했던 것이며, 리카르도는 모범을 보였습니다. 루핑을 피하는 것이 좋습니다. –

+1

원래 포스터는 두 개의 목록을 동시에 반복하는 것에 대해 혼란 스러웠습니다. http://www.stata-journal.com/sjpdf.html?articlenum=pr0009 (3 절 참조)에 이에 대한 일반적인 논의가 있습니다. 최종선은 AL <-> 알라바마 등등 어떻게 든 알 수있는 등가물을 철자해야한다는 것입니다. (아주 다른 의견은 원래의 포스터는 "우리"는 모두 미국에 있고 50 개 주와 fips 코드를 알고 있다는 것을 알고 있다고 가정합니다. 그의 상황을 추측하는 것은 어렵지 않지만 국제 포럼입니다!) –

답변

2

다음은 FAQ에 설명 된 전략의 예입니다.

1) 상태 이름과 관련 fips 코드의 두 변수가 포함 된 데이터 집합을 만듭니다. 좀 더 유연하게 만들기 위해, 나는 주 이름에 대한 공통의 준 약어를 포함한다. 앞으로는 2 글자 상태 약어를 포함하는 세 번째 변수를 추가 할 수 있습니다.

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()'옵션으로 유지할지 지정할 수 있습니다. '병합 '을 참조하십시오. –

+1

@Fr. 맞습니다. 다음과 같이 :'statefips.dta를 사용하여 m : 1 상태를 병합하고, keep (3)'을 사용하여 –

2

하지만, STATA

. search merge, faq 

에서 명백한 바로 가기 키트 바움에 의해 관련 FAQ를 찾을 수 있습니다.

+0

Stata는 사용자가 그렇게하기를 원합니다. –