2013-05-27 3 views
1

나는 53 개의 Stata .dta 파일을 가지고 있는데, 각 파일은 150 - 200 Mb이고 동일한 변수 세트를 포함하지만, 다른 해를 포함한다. 크기 때문에 결합하거나 병합하는 것은 유용하지 않습니다. 하는 것이 열어야합니다 :여러 개의 Stata 파일에서 데이터를 검색하는 방법은 무엇입니까?

는 좀 그러므로, 나는 새로운 STATA가 New.dta를 제출하고 다음과 같은 방법으로 그 새로운 STATA 파일을 실행하는 것 .do 파일을 작성 만들려면 값 (비율 등)을 평균 검색해야 그 53 개 STATA 파일의 각 특정 calulations을하고, 새로운 STATA 파일에 결과를 저장, New.dta.

가 나는 두 STATA가 simultaneuosly 파일 열기 유지할 수있는 방법을 잘 모르겠습니다, 그리고 내가 어떻게 계산 된 값을 저장할 수 있습니다 ?

두 번째 .dta 파일을 열 때 어떻게 첫 번째 파일을 여전히 열 수 있습니까? 계산 된 값을 전역 변수에 저장할 수 있습니까?

답변

4

여기에 떠오르는 것은 postfile입니다.

다음은 간단한 예입니다. 먼저 여러 데이터 세트의 예를 설정했습니다. 당신은 이미 이것을 가지고 있습니다.

clear 

forval i = 1/10 { 
    set obs 100 
    gen foo = `i' * runiform() 
    save test`i' 
    clear 
} 

이제는 postfile을 설정했습니다. 핸들을 설정하고, 변수를 사용하고, 사용할 파일을 설정해야합니다. 파일 식별자를 저장하기 위해 숫자 변수를 사용하고 있지만 문자열 변수를 사용하는 것이 더 일반적 일 수 있습니다. 또한 파일 이름을 반복하면 이보다 약간 더 어려울 수 있습니다. SSC의 fs은 파일 이름 집합을 로컬 매크로에 넣는 데 도움이되는 편리한 명령입니다. 그 사용법은 여기에 설명되어 있지 않습니다.

postfile mypost what mean using alltest.dta 

forval i = 1/10 { 
    use test`i', clear 
    su foo, meanonly 
    post mypost (`i') (`r(mean)') 
} 

이제 플러시 결과

postclose mypost 

우리가 무엇을 참조하십시오.

u alltest 

list 

    +-----------------+ 
    | what  mean | 
    |-----------------| 
    1. | 1 .5110765 | 
    2. | 2 1.016858 | 
    3. | 3 1.425967 | 
    4. | 4 2.144528 | 
    5. | 5 2.438035 | 
    |-----------------| 
    6. | 6 3.030457 | 
    7. | 7 3.356905 | 
    8. | 8 4.449655 | 
    9. | 9 4.381101 | 
10. | 10 5.017308 | 
    +-----------------+ 

여기서 전역 변수 (전역 변수가 아님)를 사용하지 않았습니다. 너는 할 필요가 없어.

+0

고맙습니다 ... 나는 그것을 시도했지만, 여전히'postmypost not found'를 얻습니다. 나는'mypost.dta'를 만들려고 노력했습니다 ...여전히 같은 오류. 'mypost.dta'가 대상 파일입니까? – Buras

+0

시도한 코드를 게시해야합니다. 그렇지 않으면 구문 오류가 있다고 제안 할 수 있습니다. –

+0

위의 질문에서 시도한 코드를 추가했습니다 ... 레이아웃이 주석 섹션에서 좋지 않습니다 ... – Buras

4

대체 방법은 파일을 반복하고 collapse을 사용하여 이러한 파일을 관련 방법으로 "압축"하고 append 압축 된 파일보다 더 많이 사용하는 것입니다. 여기에 닉의 예를의 적응이다 :

// create the example datasets 
clear 

forval i = 1/10 { 
    set obs 100 
    gen foo = `i' * runiform() 
    gen year = `i' 
    save test`i', replace 
    clear 
} 

// use collapse and append 
// to create the dataset you want 
use test1, clear 
collapse (mean) year foo 
save means, replace 
forvalues i = 2/10 { 
    use test`i', clear 
    collapse (mean) year foo 
    append using means 
    save means, replace 
} 

// admire the result 
list 
+0

이것은 좋은 방법이며 이해하기 쉽습니다. Maarten이 행복하게 강조하는 것처럼, 그것은 붕괴가 할 수있는 것에 엄격히 제한됩니다. 그러나이 경로가 마음에 들면 '계약'에 대해서도 알고 있어야합니다. –

1

참고는 데이터 세트 이름이되지 않을 경우 순차적으로 test1.dta, test2.dta, ..., test53.dta 아니라 같은 results-alaska.dta, result_in_alabama.dta, ..., "wyoming data.dta" (주 같은 공간 따라서 따옴표), 당신은 약간 다르게이 파일을 덮어주기를 구성해야합니다 :

local allfiles : dir . files "*.dta" 
foreach f of local allfiles { 
    use `"`f'"', clear 
    * all other code from Maarten's or Nick's approach 
} 

이 지역 매크로의 고급이다, help extended macro functions를 참조하십시오. Stata는 파일 이름을 따옴표로 묶어 "results-alaska.dta" "result_in_alabama.dta" "wyoming data.dta" 같은 목록을 생성하므로 use을 호출 할 때 파일 이름을 compound quotes으로 묶어야합니다.

관련 문제